如何使用相同的IP和不同的SSH端口号通过SSH进入两个不同的Linux SSH主机docker

问题描述

以下是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 [email protected]

这会将条目添加〜/ .ssh / kNown_hosts 文件中。

我也可以像这样连接到DockerHostA

ssh -p 9090 [email protected]

这还会在 kNown_hosts 文件添加一个条目(第二个)。发生这种情况后,我只能连接到DockerHostA,而无法通过SSH进入HostA。

ssh [email protected]
ssh -p 9090 [email protected]

这两个ssh都进入DockerHostA。

我可以删除kNown_hosts文件,这样就可以在问题再次发生之前,通过ssh连接到这两个主机一次。

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

所以,我的问题是

  1. 如何连接到具有相同IP地址但端口不同的两个不同主机?
  2. 我可以做任何事情来路由ip:172.17.0.8(DockerHostA)的流量,所以我可以直接ping该IP地址吗?。

解决方法

问题1:

我假设您完全了解指纹检查的目的,以及自动确认新指纹或认为指纹更改合法的风险是什么?

ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" [email protected]
ssh -p 9090 -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" [email protected]

问题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>

,

您可以将两个SSH容器端口(so 22)都映射到主机上的任意端口。这样,您就可以做到这一点

容器1

ssh -p 9000 user@localhost

容器2

ssh -p 9001 user@localhost