Как «прописать» ключ SSH на удаленной машине без ssh-copy-id | Zhbert’s Home
Zhbert's Home
Домашняя страничка Zhbert'а

Как «прописать» ключ SSH на удаленной машине без ssh-copy-id

Простая, но тем не менее интересная задачка встала передо мной буквально вот сейчас.

Дано:

  • машина в облаке с доступом по SSH-ключу без пароля;
  • ключ прописан всего один, и от другого ноута.

Задача: дать доступ с рабочего ноута, у которого нет доступа к облачной машине.

Для красноглазого со стажем это не покажется чем-то сложным, а вот для новичка в этих наших линуксах вполне может. А уж для «виндовоза» все закончится еще на слове «SSH» :) Шутка, конечно же, ни в коем случае не хотел оскорбить пользователей винды.

Итак, есть ноут с доступом, его ключ прописан на удаленной машине. То есть доступ к самой удаленной машине есть! Теперь надо просто закинуть туда ключ с другого ноута, воспользовавшись первым.

Для начала перекидываем ключ с одного ноута на другой. Я сделал это с помощью все того же SSH (если для ноута включен доступ, конечно же, часто на десктопных ОС он выключен по умолчанию): $ scp ~/.ssh/id_rsa.pub user@host:/path/to/file.

При передаче по scp первым параметром идет то, что копируем, а вторым путь, куда мы это копируем. Здесь я копирую локальную публичную часть SSH-ключа на второй ноут. user здесь — имя пользователя удаленной машины, а host – айпишник или сетевое имя.

Теперь ключ лежит на ноуте, который имеет доступ к удаленной машине.

Кто не знает, SSH-ключ представляет собой простой текстовый файл с одной строкой, содержащей нужные данные, и посмотреть его можно банальной командой cat: cat ~/.ssh/id_rsa.pub.

На удаленном сервере публичная часть ключа должна быть прописана в файле ~/.ssh/authorized_keys. Там может быть несколько ключей, каждый расположен на новой строке. Поэтому на машине, на которую мы скопировали ключ, выполняем следующую магию (находясь в каталоге, куда мы положили файл со второго ноута): cat ./id_rsa.pub | ssh user@host "cat >> ~/.ssh/authorized_keys".

Тут все просто — простой «конвейер» из двух команд: первая вываливает содержимое файла ключа, а вторая переносит это по SSH на удаленную машину (доступ к которой у нас был с этого ноута изначально) и снова вываливает полученное содержимое в stdout, тут же перенаправляя вывод в нужный файл.

Все, можно идти на второй ноут и проверять, что все работает, и доступы появились.

P.S. В принципе, все это можно было бы обернуть вообще в одну длинную команду, где последовательно скинуть ключ на первый ноут, а потом вывалить его содержимое в нужный файл на удаленной машине. И получился бы красивый однострочник, но я решил пойти двумя шагами, чтобы было более понятно, как и что делается.