Как автоматически добавить сервер в known_hosts? (и не использовать отпечаток md5, так как я имею в виду безопасный способ, пожалуйста, не отправляйте решения «автоматически да/принять». Я хочу перенести требуемые учетные данные с сервера на машину)
Я хотел бы автоматически обновить свой known_hosts
файл SSH для приема нового сервера.
Я предполагаю, что мне нужно добавить открытый ключ сервера ( id_rsa.pub
полученный через защищенный канал), но я вижу, что формат отличается (я пробовал добавлять таким образом, awk '{print "server "$1" "$2}' id_rsa.pub > .ssh/known_hosts
но проверка не удалась. Обратите внимание, что я не хочу использовать отпечаток md5 из-за недостатков md5). Если что-то еще id_rsa.pub
может быть полезным, я могу запустить команды на сервере и получить результаты через доверенный канал. (Обратите внимание, что это не сетевой канал (представьте себе физическое перемещение флешки из одного места в другое), поэтому это ssh-keyscan
не решает проблему, более того, id_rsa.pub — это ключ сервера dropbear, который не запущен на сервере, поэтому доступны только файлы с ключами, а не сервер)
решение1
Название id_rsa.pub
похоже на открытый ключ пользователя. Это не имеет ничего общего с known_hosts
— known_hosts
хранит ключи хоста. Ключи хоста, как следует из названия, аутентифицируют хост (т. е. компьютер), тогда как ключи пользователя аутентифицируют пользователя. Открытые ключи хоста OpenSSH обычно находятся в /etc
или /etc/ssh
и называются примерно так ssh_host_rsa_key.pub
: .
Dropbear имеет один файл, содержащий закрытый ключ. Чтобы извлечь открытый ключ (в формате, совместимом с Dropbear и OpenSSH), запустите
dropbearkey -f /etc/dropbear/dropbear_rsa_host_key -y | sed -n 2p >host_key.pub
Я не думаю, что OpenSSH поставляется с командой для обновления known_hosts
файла. Это достаточно легко сделать вручную:
echo "$server_name,$server_ip_address $(cat server_ssh_host_rsa_key.pub)" >>~/.ssh/known_hosts
Если вы хотите хешировать имена хостов (чтобы тот, кто читает ваш known_hosts
файл, не мог узнать имена этих серверов — это очень незначительное улучшение конфиденциальности), запустите ssh-keygen -H
после этого.