Самый простой способ скопировать ssh-ключи на другую машину?

Я ленив дома и использую аутентификацию по паролю для своих домашних компьютеров. Я готов перейти к аутентификации на основе ключей. В Интернете есть много вариантов того, как это сделать, в том числе перехват, затем передача ключа, прямая передача ключа и т.д.

Я ищу самый простой и рекомендуемый способ копирования ключа, надеюсь, где-то в пакете Ubuntu ssh есть удобная оболочка?

Я уже осведомлен о как отключить логины с паролем.

То ssh-copy-id команда (в openssh-клиент пакет и установлен по умолчанию) делает именно это:

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>"

Мне нравится ответ Марселя. Я не знал этой команды. Я всегда использовал то, что нашел на Веб-сайт Oracle:

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"'

Графический метод

  1. Открыть ПриложенияПароли и ключиМои Личные Ключи.
  2. Выберите свой ключ, а затем нажмите ДистанционныйНастройка ключа для защищенной оболочки.

Set Up Computer for SSH Connection

В Ubuntu вы можете получить свои ключи с панели запуска:

ssh-import-id [launchpad account name]

Подробности:

  1. Вам нужна учетная запись Launchpad, поэтому войдите в систему или создайте учетную запись
  2. После входа в систему нажмите кнопку рядом с SSH-ключи:
  3. Вставьте содержимое вашего файла с открытым ключом в это поле (включая комментарий). Такой ключ выглядит как:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn

    Здесь, ssh-rsa указывает, что ключ является ключом RSA, AAAAB3Nza .... UyDOFDqJp является фактическим ключом и lekensteyn это комментарий.

  4. Сохраните ключ, нажав Импорт Открытого Ключа
  5. Если все прошло хорошо, ваш ключ теперь должен быть указан в разделе 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"

-я переключаю настройки по умолчанию на ~/.ssh/id_rsa.pub, если вам нужен другой ключ, укажите путь к ключу после -i

предупреждение: Если вы не написали -i, он скопирует все ваши ключи, найденные в ~/.ssh

Вот менее безопасное, но очень простое решение (не рекомендуется для серверов):

Подвиньте ~/.ssh к новой машине и запустите ssh-add. ГОТОВО!

ДЛИННЫЙ ОТВЕТ:

  1. На старой машине возьмите папку ~/.ssh на USB-накопитель или в любое другое хранилище, которое вам нравится.
  2. На новой машине поместите папку под ~ также известный как /home/$USER.
  3. Бежать ssh-add, на новой машине сделано.

ssh-copy-id делает именно это. Я не уверен, почему некоторые из других ответов здесь добавляют неточную информацию. В справке показано следующее:

~$ ssh-copy-id -hUsage: /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