如何清除由SSH ProxyCommand保留的打开连接?

4
我有一个Web服务器WWW1和一个前置代理PRX。我使用SSH ProxyCommand通过PRX(私有+公共IP)连接到WWW1的内部IP(私有IP)。对于一些连接(而不是全部),我发现在完成后仍然保留着网络连接。这些会累积起来!
~/.ssh/config
Host *
  ServerAliveInterval 5
  ControlMaster auto
  ControlPath ~/.ssh/master-%r@%h:%p

Host WWW1 WWW2 WWW3
  User foo
  ProxyCommand ssh -q -a -x PRX nc %h 22
  IdentityFile ~/.ssh/id_foo_WWWx

在PRX上,lsof | grep WWW1:ssh显示目前有124个打开的连接。在WWW1上,相同的命令显示243个打开的连接。WWW2、WWW3等也有类似的打开连接。
WWW1和PRX都是Debian系统。客户端连接来自Debian、Ubuntu和OSX10.6混合使用。我使用Emacs Tramp,但这没有特殊配置(据我所知),除了我的~/.ssh/config
我担心内部端口用尽,理想情况下,我希望这些连接可以自动清理,无需干预。最好通过配置它们自行关闭;如果无法实现,也可以使用一个命令来杀死旧进程!

1
一个解决方法可能是设置一个cron任务,在一周后杀死PRX上的nc进程... - Chris Burgess
2个回答

10
更好的方法是使用SSH的-W选项,这样您就可以输入
 ProxyCommand ssh -q -a -x PRX -W %h:22

取代
 ProxyCommand ssh -q -a -x PRX nc %h 22

这样您也可以摆脱对 nc 的依赖。


5

不知道是否重要,但我使用nc -w 1 %h %p


太好了!我简直不敢相信我在SuperUser.com上等了这么久才获得“Tumbleweed”徽章,然后来到这里提问,结果只用了五分钟就得到了回答。因为nc使用并不是一个编程问题,对吧? - Chris Burgess
只有真正的程序员才知道如何通过代理进行隧道连接 :) - sehe
在我测试bash中的nc -w 3之前,它没有超时,所以我认为它不起作用,但是在ssh proxycommand中它确实起作用了,我还不知道原因。它已经退出,但是非常长,我写了3秒钟,但是它在2分钟后退出了:

date; nc -n -w 3 192.168.3.3 22; date

Tue Jun 7 18:26:45 CST 2022 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.2 Tue Jun 7 18:28:45 CST 2022 ii netcat-traditional 1.10-40 amd64 TCP/IP Swiss Army Knife
- tom
日期;nc -n -w 3 -q 0 -v 172.22.18.19 22; 日期 2022年06月08日 星期三 12:08:13 CST 连接到172.22.18.19的22端口[tcp/*]成功! SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3 2022年06月08日 星期三 12:08:16 CST 将“-w”添加“-q”,没问题,更好。这可能与nc版本有关。 - tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接