2009-04-09 4 views
14

У меня есть 2 сервера ssh за брандмауэром nat в месте, которое меняет свой IP-адрес каждый день. Они всегда находятся на одном и том же IP-адресе в определенный момент времени, но на разных портах.Как обрабатывать проверку ключа хоста ssh с помощью двух разных хостов на одном и том же (но изменяющемся) IP-адресе?

Я подключения к серверу А так:

ssh -p 22001 [email protected] 

и на сервере B:

ssh -p 22002 [email protected] 

Так я получаю 2 разных ключа хоста для одного IP, а также при изменении IP даже другой IP для одного и того же хоста.

Мне нужно удалить лишний ключ или старый ключ (в случае изменения IP) в файле known_hosts.

Я не решаюсь выключить проверку ключа, потому что это будет менее безопасным. Но получение предупреждения все время также небезопасно (потому что я все время игнорирую такие предупреждения). Есть ли лучшее решение?

Это связано с моим старым вопросом здесь, но не то же самое:

SSH login warning message on a server with 2 DNS names

+0

почему это закрыто вместо перехода к [суперпользователя] (HTTPS : //superuser.com/) или [Unix & Linux] (https://unix.stackexchange.com/)? –

ответ

32

Я думаю, что это будет работать:

Создать config файл в .ssh каталоге следующим образом:

Host server1 
    Hostname x1.example.com 
    HostKeyAlias server1 
    CheckHostIP no 
    Port 22001 
    User karl 

Host server2 
    Hostname x2.example.com 
    HostKeyAlias server2 
    CheckHostIP no 
    Port 22002 
    User karl 

Пояснение ниже (от man ssh_config)

CheckHostIP

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

HostKeyAlias ​​

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

Username и Port линия избегает вас от необходимости давать эти параметры в командной строке, так что вы можете просто использовать:

% ssh server1 
% ssh server2 
+0

Это так здорово! Отлично работает, спасибо! – user89021

+1

Просто интересно: есть ли способ иметь ssh хранить IP-порт в known_hosts?IIUC, это обеспечит некоторую защиту от подмены DNS, не так ли? – Hbf

+1

@Hbf в моей системе MacOS X порт (если не стандартный) _is_ хранится в 'known_hosts'. – Alnitak