Я ленив дома и использую аутентификацию по паролю для своих домашних компьютеров. Я готов перейти к аутентификации на основе ключей. В Интернете есть много вариантов того, как это сделать, в том числе перехват, затем передача ключа, прямая передача ключа и т.д.
Я ищу самый простой и рекомендуемый способ копирования ключа, надеюсь, где-то в пакете 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. Но используя ssh-copy-id это определенно более безопасный способ сделать это правильно!
Обратите внимание, что если папка .ssh еще не существует, приведенная выше команда завершится ошибкой. Кроме того, возможно, было бы лучше при создании файла установить минимально возможное разрешение (в основном только для чтения и записи для владельца). Вот более продвинутая команда:
После входа в систему нажмите кнопку рядом с 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 и ранее вы можете выполнить то же самое с помощью:
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
Перед выполнением команды я фактически использовал -n переключитесь в конце, чтобы выполнить пробный запуск, который подтвердил, что команда будет работать так, как задумано. Как только я подтвердил это, я снова выполнил команду, как указано выше, без -n переключатель.