如何使用相同的IP和不同的SSH端口号将SSH连接到两个不同的Linux SSH主机(docker)

如何使用相同的IP和不同的SSH端口号将SSH连接到两个不同的Linux SSH主机(docker),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.16

以下是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
这还会在已知的_hosts文件中添加一个条目(第二个)。发生这种情况后,我只能连接到DockerHostA,无法通过ssh连接到HostA

ssh user@192.168.1.200
ssh -p 9090 user@192.168.1.200
这两个ssh都可以连接到DockerHostA

我可以删除已知的_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" 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:
    时,docker会自动创建一个从
    主机:
    容器:
    的转发规则,您可以映射两个SSH容器端口(so 22)在您的主机上创建任意端口。例如,通过这种方式,您将能够做到这一点

    容器1

    ssh-p9000user@localhost
    
    容器2

    ssh-p 9001user@localhost