Почему SSH добавляет запись known_host для IP-адреса?

18

У меня есть хост с именем nms.example.org. По моему у /etc/ssh/ssh_known_hostsменя есть запись для хоста с ключом RSA. Эта запись и все остальные записи управляются моей системой управления конфигурацией.

nms.example.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZqfmVPs/XqTS...

Также у меня есть запись для моего /etc/ssh/ssh_configконкретного хоста, задающего псевдоним ключа хоста. Что, если я все правильно понимаю, это значит, что только значение nms.example.orgдолжно иметь значение.

Host nms.example.org nms.example nms
    HostKeyAlias nms.example.org
    HostName nms.example.org

Почему тогда, когда я подключаюсь с клиента, ssh все еще думает, что ему нужно добавить ключ для моего пользователя known_hosts с IP-адресом хоста?

$ ssh nms -v
OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /home/zoredache/.ssh/config
debug1: /home/zoredache/.ssh/config line 61: Applying options for *
debug1: /home/zoredache/.ssh/config line 71: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 84: Applying options for nms
debug1: /etc/ssh/ssh_config line 363: Applying options for *
debug1: Connecting to nms.example.org [104.236.190.144] port 22.
debug1: Connection established.
debug1: identity file /home/zoredache/.ssh/zoredache-20140204.id_rsa type 1
...
debug1: Server host key: RSA 6b:5f:b6:e9:13:c3:b7:39:1e:ec:74:05:33:64:4d:5e
debug1: using hostkeyalias: nms.example.org
debug1: Host 'nms.example.org' is known and matches the RSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:104
Warning: Permanently added the RSA host key for IP address '192.0.2.144' to the list of known hosts.
debug1: ssh_rsa_verify: signature correct
...

SSH знает, что мой хост действителен (см . Host 'nms.example.org' is known and matches the RSA host key:), так почему он добавляет ключ для IP в профиль пользователя?

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

$ ssh nms -v
OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013
...
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u4
debug1: using hostkeyalias: nms.example.org
...
debug1: Server host key: RSA 6b:5f:b6:e9:13:c3:b7:39:1e:ec:74:05:33:64:4d:5e
debug1: using hostkeyalias: nms.example.org
debug1: Host 'nms.example.org' is known and matches the RSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:104
Warning: the RSA host key for 'nms.example.org' differs from the key for the IP address '192.0.2.144'
Offending key for IP in /home/zoredache/.ssh/known_hosts:25
Matching host key in /etc/ssh/ssh_known_hosts:104
Are you sure you want to continue connecting (yes/no)?

Как я могу предотвратить ssh от кэширования этого значения для каждого IP-адреса для каждого пользователя known_hosts? Или есть какая-то причина безопасности, почему я просто должен жить с этим раздражающим поведением? Это также расстраивает меня, потому что пара серверов имеют несколько динамических IP-адресов. Мое управление конфигурацией обрабатывает обновления DNS. Но я получаю эти оставшиеся ключи хоста для каждого IP-адреса, заполняя мои известные для пользователя файлы-хосты.

Zoredache
источник

Ответы:

22

Я думаю, что это сделать CheckHostIPработу.

Если для этого флага установлено значение «да», ssh (1) дополнительно проверит IP-адрес хоста в known_hostsфайле. Это позволяет ssh определять, изменился ли ключ хоста из-за подмены DNS. Если для параметра установлено значение «нет», проверка не будет выполнена. По умолчанию «да».

С этой опцией вы получаете немного лучшую диагностику в случае неправильной конфигурации или атаки, но на самом деле это никак не повышает безопасность, о которой я могу думать.

Если вы отключите его, CheckHostIPSSH (по состоянию на OpenSSH 6.7p1) не будет записывать IP-адрес при подключении к новому хосту по имени. Так что добавьте это к себе .ssh/config:

CheckHostIP no

Вы можете добавить его в Hostраздел, если хотите отключить его только для определенного хоста (особенно с динамическим IP-адресом).

Жиль "ТАК - прекрати быть злым"
источник
Да, это настройка мне нужна.
Zoredache
Хотя я согласен со всем, что вы сказали @Gilles, технически я бы (ради хорошего обсуждения) сказал, что CheckHostIP yes это повышает безопасность ... ЕСЛИ пользователь точно знает, что он делает, как система использует этот параметр, и концепции подразумеваемого доверия. Таким образом, я действительно буду раскалывать волосы, что я не буду делать ... Я
сохраню