
我使用 ssh 登入另一個系統並在那裡執行腳本來建立新機器,並進行一些設定。大約需要7-8小時。所以發生的事情是,ssh 連線不斷斷開,我總是因為腳本執行失敗而超時。
所以現在我將這個參數與 ssh 連接一起使用:
ssh -o ServerAliveInterval=60 user@host ....
此 ssh 會產生多次。問題是在幾次 ssh 連線後,我收到錯誤:
too many logins of user
並且 ssh 連線在成功登入後立即關閉。
的行為也是如此嗎伺服器活動間隔,即使在 ssh 工作結束後,遠端電腦中的 ssh 使用者登入會話仍保持活動狀態,這就是為什麼我的進一步登入被斷開的原因?
答案1
如果您的客戶端失去連接,我認為這不會使會話保持活動狀態。可能是伺服器端的那些選項:
最大客戶端存活數
設定在 sshd(8) 沒有從客戶端接收到任何訊息的情況下可以發送的客戶端活動訊息的數量。如果在發送客戶端活動訊息時達到此閾值,sshd 將斷開客戶端連接,終止會話。需要注意的是,客戶端活動訊息的使用與 TCPKeepAlive 有很大不同。客戶端活動訊息透過加密通道發送,因此不會被欺騙。 TCPKeepAlive 啟用的 TCP keepalive 選項是可欺騙的。當客戶端或伺服器依賴了解連線何時變成非活動狀態時,客戶端活動機制就非常有價值。
預設值為 3。
客戶端活動間隔
設定超時間隔(以秒為單位),在此之後如果沒有從客戶端收到數據,sshd(8) 將透過加密通道發送訊息以請求客戶端回應。預設為0,表示這些訊息不會傳送到客戶端。
也許問題的真正解決方案在於使用終端多工器(例如 screen 或 tmux)。即使您的連線斷開,它們也能讓您的登入和正在執行的程式持續存在。您可以在以後的任何時間重新連接到終端,包括正在執行的程式輸出。您也可以使用它在單一 ssh 連線中擁有多個終端機。由於您的伺服器似乎限制了您的 ssh 會話,因此這也可能很有用。你可以找到一個螢幕介紹在這裡,但還有很多其他的。
答案2
ServerAliveInterval
那麼,即使 ssh 工作結束後,遠端電腦中的 ssh 使用者登入工作階段仍然保持活動狀態,這就是我的進一步登入被中斷的原因嗎?
不會。如果您想啟動長時間運行的腳本,您應該在遠端使用nohup
,screen
或。tmux
即使在斷開連接後,它也會使您的腳本保持運行,並且使用後兩個終端,您可以重新連接現有終端。
答案3
啟用後您可能會收到這些錯誤,ServerAliveInterval=60
因為您的連線仍在運行。您對該伺服器的 ssh 連線/命令模式累積的並發連線數超出了伺服器設定允許的數量。
您的連線曾經消失,導致同時連線的數量減少,伺服器對此很滿意(沒有拒絕的連線),但您不高興。
找出該伺服器關於最大同時連線數的配置,然後保持在該限制內,或與伺服器管理員協商以提高您(甚至可能是每個人)的限制。