Ситуация для примера такая: есть два сервера за шлюзом.
Правила 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

0 коммент.:


 

Copyright © 2007 DamnSmallBlog. Content is licensed under Creative Commons Attribution-Noncommercial.

Design: GeckoandFly and Blogcrowds.