2016-09-28 53 views
0

我有,像這樣在重新啓動時啓動一個反向的SSH隧道主機:反向SSH隧道無法綁定到端口時,隧道將被拆除並重新啓動

ssh -N -R 2222:localhost:22 [email protected] 

它的偉大工程,形成反向隧道。但每當我重新啓動主機,該隧道是建立在遠程服務器上這樣說:

Sep 28 13:13:59 kali sshd[4547]: error: bind: Address already in use 
Sep 28 13:13:59 kali sshd[4547]: error: channel_setup_fwd_listener_tcpip: cannot listen to port: 2222 

爲了讓我解決此我不得不等待幾分鐘,老SSH隧道超時,然後找到新的SSH連接並殺死它,然後當我重建SSH隧道它工作正常。

是否有ssh命令或autossh命令執行類似於檢查遠程主機是否可以綁定該端口的命令,如果不是,請在幾秒鐘後重試?

+0

你可以'while/bin/true;做ssh -N ...;完成「 - 只要隧道失敗,這將重新啓動ssh進程。無論何時重啓服務器 - 這是否意味着正常的重置或重啓?如果是優雅的話,嘗試在重新啓動之前使用'TERM'信號終止ssh客戶端(應該自動完成,但可能不會發生) – Misko

+0

ssh連接已建立,但無法打開遠程服務器上的端口2222 。我希望隧道不能建立,如果它不能綁定到該端口。我正在進行平穩的重啓。 –

回答

0

我相信我遇到了與原始海報相同的問題。我似乎找到了在this question接受的答案結束瞭解決方案:

如果客戶端的連接已終止服務器之前重新連接,您可以在情況最終在新的ssh連接是活,但沒有端口轉發。爲了避免這種情況,您需要在客戶端使用ExitOnForwardFailure關鍵字。

我已經在客戶端這樣添加下面一行到我/etc/ssh/ssh_config文件:

ExitOnForwardFailure yes 

按照ssh man page,此選項將導致「一個客戶端開始與-f [於]等待所有遠程端口都將在成功建立之前成功建立「。

這似乎導致ssh嘗試在殺死一個ssh隧道後立即啓動失敗。因此,該選項可以重複嘗試,直到隧道正確重新建立。