Ситуация для примера такая: есть два сервера за шлюзом.
Правила ip-tables настроены так, что 22 порт просто пробрасывается на первый сервер, соединения же на 3500-й порт шлюза пробрасываются на 22-й порт второго сервера.
В результате по одному ip-адресу доступны 2 ssh-сервера на разных портах.
И теперь при попытке подсоединиться ко второму возникает конфликт ключей, т.к. ключ второго сервера не совпадает с сохраненным в файле known_hosts ключем первого сервера.
ssh разрывает соединение, предотвращая (по её мнению) подмену ip-адреса ssh-сервера:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Можно конечно совсем отключить проверку ключей, но это является не самым безопасным решением.
Альтернативное же решение (может опять же не лучшее, но первое пришедшее мне в голову после беглого прочтения манов ssh) - создать для каждого из двух серверов свой файл для хранения ключей.
Для этого создаем конфиг (~/.ssh/config) следующего содержания:
Host remote1
Hostname 192.168.1.1
Port 22
UserKnownHostsFile remote_file1
Host remote2
Hostname 192.168.1.1
Port 3500
UserKnownHostsFile remote_file2
Где remote_fileX - полные пути к альтернативным файлам known_hosts (логично дать им названия, содержащие имя сервера, а также положить их в ~/.ssh/)
Можно также добавить имена пользователей для серверов с помощью добавления (после имен соответствующих серверов) в конфиг строк вида:
User имя_пользователя
Это позволит не вводить имена каждый раз при обращении к серверам.
Всё, теперь оба наших сервера доступны с помощью следующих простых команд:
$ ssh remote1
$ ssh remote2
Ключевые слова: ssh
0 коммент.:
Подписаться на:
Комментарии к сообщению (Atom)