Как подключиться по SSH к двум разным хостам Linux SSH (docker) с одинаковым IP и разными номерами портов SSH

#docker #openssh

#docker #openssh

Вопрос:

Ниже приведена конфигурация IP и номера порта — на всех хостах установлена какая-либо версия Ubuntu или другая

 HostA : 192.168.1.200

DockerHostA (running in HostA) : 172.17.0.8

MyLaptop : 192.168.1.201

In the docker specification, I have mapped port 22 (of DockerHostA) to port 9090 of (HostA).
  

Я могу подключиться к HostA с помощью

 ssh user@192.168.1.200
  

это добавляет запись в файл ~/.ssh/known_hosts.

Я также могу подключиться к DockerHostA следующим образом

 ssh -p 9090 user@192.168.1.200
  

это также добавляет запись (вторую) в файл known_hosts. После этого я могу подключиться только к DockerHostA и не могу подключиться по ssh к HostA.

 ssh user@192.168.1.200
ssh -p 9090 user@192.168.1.200
  

оба этих ssh в DockerHostA.

Я могу удалить файл known_hosts, и это позволяет подключаться по ssh к обоим хостам ровно один раз, прежде чем проблема повторится.

 ~/.ssh/known_hosts has two entries
|1|883fTHa....
|1|t89sTmV....
  

Итак, мои вопросы

  1. Как я могу подключиться к двум разным хостам с одинаковым IP-адресом, но разными портами?
  2. Могу ли я что-нибудь сделать для маршрутизации трафика по ip: 172.17.0.8 (DockerHostA), чтобы я мог напрямую пинговать этот IP-адрес?.

Ответ №1:

Вопрос 1:

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

 ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" user@192.168.1.200
ssh -p 9090 -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" user@192.168.1.200
  

Вопрос 2:

Я предполагаю, что ваши контейнеры docker запущены в сети docker-bridge. Это отдельная подсеть, в которой обычно по умолчанию используется значение 172.17.0.0 / 16. По умолчанию нет маршрута от 192.168.0.0 / 24 до 172.17.0.0 / 16.

В принципе, вы можете создавать любые маршруты и правила iptables, которые вам нужны, но обычно вы хотите, чтобы docker управлял всем: когда вы используете docker run -p <src>:<dst> , docker автоматически создает правило пересылки с вашего host:<src> на ваш container:<dst>

Ответ №2:

Вы можете сопоставить оба порта вашего SSH-контейнера (so 22) с произвольными портами на вашем хосте. Таким образом, вы сможете сделать это, например

Контейнер 1

 ssh -p 9000 user@localhost
  

Контейнер 2

 ssh -p 9001 user@localhost