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

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

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

Я уже знаю на , как отключить пароли .

Ответы [ 6 ]

449 голосов
от
редактировать

Команда 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), вы должны использовать кавычки следующим образом ( source ):

ssh-copy-id "user@hostname.example.com -p <port-number>"
123 голосов
от
редактировать

Мне нравится ответ от Марселя. Я не знал эту команду. Я всегда использовал то, что нашел на веб-сайте 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"'
27 голосов
от
редактировать

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

  1. Открыть Приложения Пароли и ключи Мои персональные ключи .
  2. Выберите ключ и нажмите Удаленный Настройка ключа для Secure Shell .

Set Up Computer for SSH Connection

18 голосов
от
редактировать

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

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.

13 голосов
от
редактировать

для пользовательского порта

ssh-copy-id -i "user@hostname.example.com -p2222"

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

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

0 голосов
от
редактировать

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.

Добро пожаловать на сайт proUbuntu, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...