问题描述
以下是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....
所以,我的问题是
- 如何连接到具有相同IP地址但端口不同的两个不同主机?
- 我可以做任何事情来路由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