Я ленивый дома и использую аутентификацию по паролю для моих домашних машин. Я готов перейти к аутентификации на основе ключей. В Интернете есть много вариантов того, как это сделать, в том числе перехватывать, затем перекидывать ключ, перебирать ключ напрямую и т. Д.
Я ищу самый простой и рекомендуемый способ копирования ключа, надеюсь, есть где-нибудь в пакете Ubuntu ssh вспомогательная оболочка?
Я уже в курсе, как отключить пароли логинов .
Ответы:
Команда
ssh-copy-id
(в пакете openssh-client и установлена по умолчанию) делает именно это:копирует открытый ключ вашей идентификационной информации по умолчанию (используется
-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@host -p 6842"
brew install ssh-copy-id
а затем запустить команду.Мне нравится ответ от Марселя. Я не знал эту команду. Я всегда использовал то, что нашел на веб-сайте Oracle :
Я подумал опубликовать это здесь еще, потому что это хорошая иллюстрация того, чего можно достичь в шелл-коде с помощью силы
ssh
. Но использованиеssh-copy-id
определенно более безопасного способа сделать это правильно!Обратите внимание, что если папка
.ssh
еще не существует, приведенная выше команда не будет выполнена. Кроме того, может быть лучше при создании файла установить минимально возможное разрешение (в основном чтение-запись только для владельца). Вот более продвинутая команда:источник
.ssh
на удаленной стороне папки не существует.cat
Не нужен - нормальный вход Перенаправление достаточно, например< ~/.ssh/id_rsa.pub | ssh ...
Графический метод
источник
seahorse
.В Ubuntu вы можете получить ключи с Launchpad:
Детали :
Вставьте содержимое файла с открытым ключом в это поле (включая комментарий). Такой ключ выглядит так:
Здесь
ssh-rsa
указывает, что ключ является ключом RSA,AAAAB3Nza .... UyDOFDqJp
является фактическим ключом иlekensteyn
является комментарием.Пакет
ssh-import-id
должен быть установлен на машине, к которой необходимо получить доступ удаленно. Этот пакет устанавливается вместе сopenssh-server
пакетом, поскольку это рекомендуемый пакет дляopenssh-server
. Убедившись, чтоssh-import-id
оно установлено на клиентском компьютере, запустите:Это загрузит открытый ключ с серверов Launchpad по протоколу HTTPS, который защитит вас от MITM-атак.
В Ubuntu Lucid и ранее вы можете сделать то же самое с:
Команда
echo
нужна для получения дополнительной новой строки после строки с ключом SSH.источник
для пользовательского порта
-i переключатель по умолчанию ~ / .ssh / id_rsa.pub, если вам нужен другой ключ, укажите путь к ключу после -i
ВНИМАНИЕ: Если вы не написали -i, он скопирует все ваши ключи, найденные в ~ / .ssh
источник
ssh-copy-id
делает именно это. Я не уверен, почему некоторые другие ответы здесь добавляют неточную информацию. Справка показывает следующее:Я только что попробовал следующее на клиенте Ubuntu 18.04 с сервером CentOS 7.6, и это сработало как прелесть. В примере показано использование настраиваемого порта
2222
и указание открытого ключа в~/.ssh/path-to-rsa.pub
Перед выполнением команды я фактически использовал
-n
переключатель в конце, чтобы выполнить пробный прогон, который подтвердил, что команда будет работать, как предполагалось. Как только я подтвердил это, я снова выполнил команду, как указано выше, без-n
переключателя.источник