#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....
Итак, мои вопросы
- Как я могу подключиться к двум разным хостам с одинаковым IP-адресом, но разными портами?
- Могу ли я что-нибудь сделать для маршрутизации трафика по 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