2011-04-28 35 views
4

我有一個網絡服務器WWW1和一個前置代理PRX。我使用SSH ProxyCommand通過PRX(私有+公共IP)連接到WWW1的內部IP(私有IP)。對於某些連接(不是全部),我看到網絡連接完成後仍然處於打開狀態。這些加起來!如何清除通過SSH ProxyCommand打開的連接?

的〜/ .ssh /配置

Host * 
    ServerAliveInterval 5 
    ControlMaster auto 
    ControlPath ~/.ssh/master-%[email protected]%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,但這沒有特殊配置(AFAIK),在我的~/.ssh/config之外。

我很擔心內部端口耗盡,理想情況下我希望這些連接能夠在沒有干預的情況下自行清理乾淨。理想情況下,通過配置它們來消滅自己;如果沒有一個命令我可以殺死舊的進程是好的!

+1

一種解決方法*可能*設置一個cron任務,在一週後殺死PRX上的'nc'進程... – 2011-04-28 09:30:21

回答

4

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

+0

你美麗!我不敢相信我在SuperUser.com上等了同一個問題纔得到「Tumbleweed」徽章,然後在五分鐘內回答問題。因爲nc用法不是一個*編程*問題,對嗎? – 2011-04-28 09:46:22

+0

那麼,只有[真正的程序員](http://www.th-soft.com/zzJargon/R.htm#Real_Programmer)知道如何隧道代理:) – sehe 2011-04-28 10:26:02

10

一個更好的辦法是使用SSH的-W選項,所以你可以把

ProxyCommand ssh -q -a -x PRX -W %h:22 

,而不是

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

這樣你也可以擺脫對nc的依賴。