Answers:
您不能为ssh客户端指定源端口。
但是您可以将其nc
用作代理,如下所示:
ssh -p 33101 -o 'ProxyCommand nc -p 33101 %h %p' $SERVER_2
对于一次性的或偶然的情况,ProxyCommand方法很容易实现。
另一方面,如果您需要多个同时连接,或者当您需要经常使用该命令进行日常工作时,您可能还可以考虑在服务器上设置网络地址转换(NAT)规则。
这需要root
服务器上的超级用户(通常是)访问权限,才能首先应用一个单独的NAT规则。请注意,即使您具有超级用户访问权限,即使您的“服务器”实际上是容器(例如Docker容器)而不是机器,也可能根本不允许(或有效)应用NAT规则。
说到带有该iptables
套件的典型Linux系统,针对您的示例案例在server1上应用的NAT规则可能像这样:
iptables -t nat -I POSTROUTING -d <server2-ip-address> -p tcp --dport <server2-port> -j SNAT --to :33101-33109
该命令指示Linux内核使用当时在33101-33109范围内选择的源端口建立与server2-ip-address的server2-port的任何连接。
一旦制定了该规则,就可以按照通常的方式连接到server2:
ssh username@server2 -p remote_port
ssh
只要您在NAT规则中指定的范围内有可用端口,就可以根据需要并发使用同一命令多次。
但是请注意,netstat
在服务器上运行的(或等效命令)会将连接的本地地址报告为未经修改的,随机选择的源端口号,即使传递到服务器2的实际流量携带了经过修改的源端口号也是如此。
要撤消NAT规则,该命令是相同的,只是用一个-D
选项代替-I
。
要在启动时自动应用NAT规则,取决于您在服务器上拥有的Linux发行版,以及它是否已经具有某些防火墙配置。
我没有使用过类似BSD的系统的经验,但是我相信有同样的经验。