ssh: автоматически принимать ключи

Я написал этот небольшой служебный скрипт:

for h in $SERVER_LIST; do ssh $h "uptime"; done

Когда новый сервер добавляется в $SERVER_LIST, скрипт останавливается с:

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

пытался yes:

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

без удачи.

Есть ли способ параметризации ssh для автоматического принятия любого нового ключа?

224
задан 18 April 2012 в 13:11

5 ответов

Используйте параметр StrictHostKeyChecking, например:

ssh -oStrictHostKeyChecking=no $h uptime

Этот параметр также можно добавить в ~ / .ssh / config, например:

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

Обратите внимание, что когда хост ключи изменились, вы получите предупреждение, даже с этой опцией:

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

Если ваши хосты не часто переустанавливаются, вы можете сделать это менее безопасным (но более удобным для часто меняющихся ключей хоста) с опцией -oUserKnownHostsFile=/dev/null. Это отбрасывает все полученные ключи хоста, поэтому оно никогда не сгенерирует предупреждение.


С 18.04 появилась новая возможность: StrictHostKeyChecking=accept-new. Из man 5 ssh_config :

If this flag is set to “accept-new” then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to “no” or “off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.
0
ответ дан 18 April 2012 в 13:11

Вы можете использовать следующую команду, чтобы добавить отпечаток пальца для сервера в ваших known_hosts

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

ПРИМЕЧАНИЕ. Заменить < ip-адрес> и < hostname> с IP-адресом и DNS-именем сервера, который вы хотите добавить.

Единственная проблема с этим заключается в том, что у вас будет несколько серверов в ваших известных_хостах дважды. Это не так уж важно, просто упомянуть. Чтобы убедиться в отсутствии дубликатов, вы можете сначала удалить все серверы, выполнив сначала следующее:

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

Таким образом, вы можете выполнить:

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

Одна вещь, которую следует иметь в виду, когда удаляя только для повторного добавления, вы по существу удаляете безопасность проверки отпечатка пальца. Так что вы определенно не захотите запускать этот скрипт перед каждым выполнением вашего служебного скрипта.

0
ответ дан 18 April 2012 в 13:11

Я немного опоздал с этим ответом, но разумным способом было бы выполнить ssh-keyscan на новой машине, прежде чем вы начнете сбор данных о доступности.

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

Отключение проверки работоспособности для удобства звучит как плохой план, даже если вы думаете, что полностью контролируете окружающую среду.

0
ответ дан 18 April 2012 в 13:11

Чтобы добавить список серверов автоматически, мы можем сделать следующее:

Добавить IP-адреса серверов в список файловых серверов

IP-адреса должны быть добавлены в следующем формате.

Вывод cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

Измените вышеуказанные IP-адреса, заменив свой.

Команда ниже добавит все серверы из списка.

ssh-keyscan -p61 -H "`cat servers-list`" >> ~/.ssh/known_hosts
0
ответ дан 18 April 2012 в 13:11

Добавьте эту запись в ~ / .ssh / config файл

Host *
    StrictHostKeyChecking no

Если он жалуется на разрешение доступа к ~ / .ssh / config , попробуйте

$ chmod 644 ~/.ssh/config
4
ответ дан 6 February 2020 в 06:14

Другие вопросы по тегам:

Похожие вопросы: