Как использовать закрытый ключ для настройки без пароля ssh на новом компьютере

У меня есть одна машина, source1 и есть без пароля ssh, уже установленный на более чем 100 серверов, скажем remote1 , remote2 , … remote100 .

Теперь мне нужно установить аналогичную настройку без пароля ssh на другом сервере source2 и я не хочу копировать открытый ключ source2 в файл authorized_keys всего сотен серверов.

Можно ли использовать закрытый ключ сервера source1 для установки аналогичной настройки на source2 ? Как это сделать? Я слышал о том, что ssh-agent – это один из способов, но не мог понять многое на шагах.

Если у всех ваших пультов есть свой собственный пользователь root (то есть разные /root каталоги) со своим собственным файлом authorized_keys , вам нужно будет отредактировать все их все, чтобы добавить новый ключ:

 for remote in $(seq 100); do cat public_key.pub | ssh "remote$remote" tee -a .ssh/authorized_keys done 

Однако вы также можете отправить свой собственный ключ source1 в source2. Таким образом, обе машины будут использовать одну и ту же пару ключей (которая уже зарегистрирована всеми пультами). Я не думаю, что это могло бы создать какие-то конфликты, но наличие двух клавиш кажется мне более естественным. Факт в том, что все ваши машины, вероятно, находятся в одной сети и управляются одним и тем же пользователем, если один из них скомпрометирован, вероятно, будет нарушать всю систему. Таким образом, наличие двух не принесет гораздо большей безопасности (поскольку одного достаточно, чтобы где-то стать root).

Принятие подхода зависит от конкретного сценария. Было бы лучше, если уже есть ключ, который существует в authorized_keys пользователях пользователя на всех серверах, которые могут использоваться для аутентификации при добавлении нового ключа на удаленные хосты, потому что в противном случае вам нужно ввести пароль для каждого хоста.

Самый простой способ автоматизировать копирование ssh-ключа на удаленную машину – это использовать ssh-copy-id , и если у вас есть серверы, называемые remote1 через remote100 это можно сделать с помощью следующего:

 for server in $(seq -f 'remote%.0f' 1 100); do ssh-copy-id -i ~/.ssh/id_rsa "$server" done 

Который автоматически будет использовать открытый ключ для id_rsa , ssh на всех серверах в последовательности и добавить открытый ключ к authorized_keys . Если это единственный ключ, который у вас будет на серверах, вам будет предложено ввести пароль, чтобы добавить их, поскольку программа ssh-copy-id должна на самом деле ssh на серверы.

Одним из способов его автоматизации еще больше было бы использовать что-то вроде того, чтобы автоматизировать вход в систему с помощью пароля, поскольку клиент ssh для OpenSSH не имеет параметра командной строки для указания пароля или, альтернативно, с помощью обертки, такой как sshpass .