答案1
您不能为 ssh 客户端指定源端口。
但您可以用作nc
代理,如下所示:
ssh -p 33101 -o 'ProxyCommand nc -p 33101 %h %p' $SERVER_2
答案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 内核与端口建立任何连接服务器2端口的server2-ip-地址使用当时可用的 33101-33109 范围内选择的源端口出去。
一旦规则到位,您就可以像平常一样连接到 server2:
ssh username@server2 -p remote_port
ssh
只要 NAT 规则中指定的范围内有可用端口,您就可以根据需要同时使用同一命令多次。
但请注意,netstat
在服务器上运行的(或等效命令)会将连接的本地地址报告为未修改的,随机选择的源端口号,即使传送到您的 server2 的实际流量携带修改的源端口号。
要撤消 NAT 规则,命令相同,只是用一个-D
选项代替-I
.
启动时自动应用 NAT 规则取决于服务器上的 Linux 发行版,以及它是否已经进行了某些防火墙配置。
我没有使用类似 BSD 的系统的经验,但我相信有一个等效的系统。