Самый простой способ скопировать ключи SSH на другую машину?
Я ленивый дома и использую аутентификацию по паролю для моих домашних машин. Я готов перейти к аутентификации на основе ключей. В Интернете есть много вариантов того, как это сделать, в том числе перехватывать, затем перекидывать ключ, перебирать ключ напрямую и т. Д.
Я ищу самый простой и рекомендуемый способ копирования ключа, надеюсь, есть где-нибудь в пакете Ubuntu ssh вспомогательная оболочка?
Я уже в курсе, как отключить пароли логинов.
5 ответов
ssh-copy-id
Команда (в пакете openssh-client и установлена по умолчанию) делает именно это:
ssh-copy-id user@hostname.example.com
копирует открытый ключ вашей личности по умолчанию (используйте -i identity_file
для других личностей) на удаленный хост.
Идентификацией по умолчанию является ваш "стандартный" ключ ssh. Он состоит из двух файлов (открытый и закрытый ключ) в вашем ~/.ssh
каталог, обычно называемый identity
, id_rsa
, id_dsa
, id_ecdsa
или же id_ed25519
(и то же самое с .pub
), в зависимости от типа ключа. Если вы не создали более одного ключа ssh, вам не нужно беспокоиться об указании идентификатора, ssh-copy-id просто выберет его автоматически.
Если у вас нет удостоверения, вы можете создать его с помощью инструмента ssh-keygen
,
Кроме того, если сервер использует порт, отличный от порта по умолчанию (22
) вы должны использовать кавычки следующим образом ( источник):
ssh-copy-id "user@hostname.example.com -p <port-number>"
Мне нравится ответ от Марселя. Я не знал эту команду. Я всегда использовал то, что нашел на веб-сайте SUN:
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'
Я подумал опубликовать это здесь еще, потому что это хорошая иллюстрация того, чего можно достичь в шелл-коде с помощью силы ssh
, Но используя ssh-copy-id
безусловно, безопасный способ сделать это правильно!
Обратите внимание, что если папка .ssh
не существует, приведенная выше команда не будет выполнена. Кроме того, может быть лучше при создании файла установить минимально возможное разрешение (в основном чтение-запись только для владельца). Вот более продвинутая команда:
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
Графический метод
- Откройте Приложения ▸ Пароли и ключи ▸ Мои личные ключи.
- Выберите ключ и нажмите " Удаленный" ▸ " Настроить ключ для Secure Shell".
В Ubuntu вы можете получить ключи с Launchpad:
ssh-import-id [launchpad account name]
Детали:
- Вам нужна учетная запись Launchpad, поэтому войдите или создайте учетную запись
- После входа нажмите кнопку рядом с ключами SSH:
Вставьте содержимое файла с открытым ключом в это поле (включая комментарий). Такой ключ выглядит так:
ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
Вот,
ssh-rsa
указывает, что ключ является ключом RSA,AAAAB3Nza .... UyDOFDqJp
фактический ключ иlekensteyn
это комментарий.- Сохраните ключ, нажав Импортировать открытый ключ
- Если все прошло хорошо, теперь ваш ключ должен быть указан в разделе SSH-ключей:
Посылка ssh-import-id
должен быть установлен на машине, к которой необходимо получить доступ с пульта. Этот пакет устанавливается вместе с openssh-server
пакет, так как это рекомендуемый пакет для openssh-server
, Убедившись, что ssh-import-id
На клиентском компьютере запустите:
ssh-import-id [launchpad account name]
Это загрузит открытый ключ с серверов Launchpad по протоколу HTTPS, который защитит вас от MITM-атак.
В Ubuntu Lucid и ранее вы можете сделать то же самое с:
wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys
echo
Команда нужна для получения дополнительной новой строки после строки с ключом SSH.
Для пользовательского порта
ssh-copy-id -i "user@hostname.example.com -p2222"
-i переключатель по умолчанию ~/.ssh/id_rsa.pub, если вам нужен другой ключ, укажите путь к ключу после -i
ВНИМАНИЕ: Если вы не написали -i, он скопирует все ваши ключи, найденные в ~ /.ssh
Решение очень простое:
Переехать
~/.ssh
к новой машине и беги
ssh-add
. СДЕЛАННЫЙ!
ДЛИННЫЙ ОТВЕТ:
- В старом аппарате возьмите папку
~/.ssh
на USB-накопитель или в любое другое хранилище, которое вам нравится. - На новой машине поместите папку в
~
он же/home/$USER
. - Бегать
ssh-add
, на новой машине сделано.
PS Так делал несколько раз. И меня удивляют слишком сложные решения в Интернете, которые обычно не работают.
ssh-copy-id
делает именно это. Я не уверен, почему некоторые другие ответы здесь добавляют неточную информацию. Справка показывает следующее:
~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
-f: force mode -- copy keys without trying to check if they are already installed
-n: dry run -- no keys are actually copied
-h|-?: print this help
Я только что попробовал следующее на клиенте Ubuntu 18.04 с сервером CentOS 7.6, и это сработало как прелесть. В примере показано использование пользовательского порта 2222
и указание открытого ключа в ~/.ssh/path-to-rsa.pub
$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 myusername@hostname.tld
Перед запуском команды я фактически использовал -n
переключитесь в конце, чтобы выполнить пробный прогон, который подтвердил, что команда будет работать как задумано. Как только я подтвердил это, я снова выполнил команду, как указано выше, без -n
переключатель.
Если у вас уже есть ключ хоста, как в случае с AWS EC2, сделайте это
cat ~/.ssh/id_rsa.pub | ssh -i hostkey.pem hostname@hostaddress 'cat >> .ssh/authorized_keys && echo "Key copied" '
В следующий раз просто сделайте это:
ssh hostname@hostaddress