我具有以下计算机的网络配置:我正在使用计算机A,并且可以通过ssh到达计算机B。机器B可以通过ssh到达其他内部机器。我也想达到这些目标。我可以将端口转发到我的机器吗?
我的目标是像往常一样在端口22上的所有计算机上以及在端口22上连接到B的所有内部计算机上使用ssh。
如何在Linux中做到这一点?
答案 0 :(得分:2)
基本上有两种方法可以做到:
例如,在远程网络上有5个节点在该网络外部不可见。 因此,您可以将所有这些ssh端口映射为22001、22002、22003、22004和22004到您的节点。
这样,您可以轻松地映射192.168.0.0这样的远程网络中所有255个设备的ssh端口
当您试图以这种方式在每个设备上映射3-4个端口时,尤其是当端口号大于65时,这种编号就成了发件人。
例如,您可以按照以下方式映射5个神话节点的端口22和80:
ssh me@server \
-L 22001:node1:22 -L 8001:node1:80 \
-L 22002:node2:22 -L 8002:node2:80 \
-L 22003:node3:22 -L 8003:node3:80 \
-L 22004:node4:22 -L 8004:node4:80 \
-L 22005:node5:22 -L 8005:node5:80
这样,您将能够通过以下方式从节点连接到node1:
ssh me2@localhost -p 22001
并通过URL http://localhost:8001/
访问node1的http端口您还可以通过对 / etc / hosts 和〜/ .ssh / config 文件进行更改来补充此类隧道,以简化工作:
#/etc/hosts
127.0.0.1 node1 node2 node3 node4 node5
#~/.ssh/config
Host node1
Port 22001
Host node2
Port 22002
Host node3
Port 22003
Host node4
Port 22004
然后您可以通过以下方式将ssh放入node1:
ssh me2@node1
这种方法虽然几乎没有远程节点和要映射的端口,但可以实现,但是当您拥有更大数量的设备时,它就会变成噩梦。
我认为一种更好的方法是将远程节点的端口映射到相同的端口号,但映射到与您的节点关联的本地IP地址。 因此,您要为环回接口分配5个新地址:
sudo ip addr add 127.77.77.1/8 dev lo label lo:1
sudo ip addr add 127.77.77.2/8 dev lo label lo:2
sudo ip addr add 127.77.77.3/8 dev lo label lo:3
sudo ip addr add 127.77.77.4/8 dev lo label lo:4
sudo ip addr add 127.77.77.5/8 dev lo label lo:5
使用dns覆盖对此类配置进行补充
# /etc/hosts
127.77.77.1 l-node1
127.77.77.2 l-node2
127.77.77.3 l-node3
127.77.77.4 l-node4
127.77.77.5 l-node5
然后使用ssh隧道将远程端口映射到相同的端口号。
# here r-node# names are IP addresses of remote nodes as server sees them
ssh me@server \
-L l-node1:22:r-node1:22 -L l-node1:80:r-node1:80 \
-L l-node1:22:r-node2:22 -L l-node2:80:r-node2:80 \
-L l-node1:22:r-node3:22 -L l-node3:80:r-node3:80 \
-L l-node1:22:r-node4:22 -L l-node4:80:r-node4:80 \
-L l-node1:22:r-node5:22 -L l-node5:80:r-node5:80
一旦建立了这样的隧道,您就可以通过ssh访问node3:
ssh me2@l-node3
#or
ssh me2@127.77.77.3
,并且在浏览器中使用http://l-node3/或http://127.77.77.3之类的URL