在使用SSH管理服務器的時候,如果你很長一段時間不登錄,那麼很可能等待著你的就是
“寫入失敗: 斷管“
造成這個錯誤的原因是SSH空閒鏈接時間太長導致的,所以,我們需要修改SSH默認配置來讓它自動關閉鏈接。
在SSH的配置當中,有兩個命令可以實現這個功能,它们分别是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//ServerAliveInterval Sets a timeout interval in seconds after which if no data has been received from the server, ssh(1) will send a message through the encrypted channel to request a response from the server. The default is 0, indicating that these messages will not be sent to the server. This option applies to protocol version 2 only. //ClientAliveInterval Sets a timeout interval in seconds after which if no data has been received from the client, sshd(8) will send a message through the encrypted channel to request a response from the client. The default is 0, indicating that these messages will not be sent to the client. This option applies to protocol version 2 only. |
這兩個命令前者應用在客戶機上,後者應用在服務器上,如果你沒有管理員權限,那麼前者是很好的選擇。
這兩個的功能是相同的,都是開啟一個發送keep-alive包的功能,這樣會允許客戶端/服務器在一定時間內發送一個特定的包給對方,一旦超時,則說明斷線,就關閉鏈接。這樣就避免了鏈接長時間掛著導致報錯。而且,一旦再次報錯,稍等片刻便可以再次登錄啦。
總之,二者選擇其一即可。
我們先來說服務器端的修改:
1 2 3 4 5 6 |
//编辑文件: /etc/ssh/sshd_config //在内容末尾添加如下语句: ClientAliveInterval 60 //保存后重启服务: /etc/init.d/ssh restart |
這樣,當服務器連續60秒沒有接收到來自客戶端的keep-alive包,就會關閉會話連接了。
接下來是客戶端的修改辦法:
如果你沒有服務器權限,那麼這是個不錯的選擇——而且,這種辦法還有個進階的使用方法——針對某個服務器單獨設置idle時長:
1 2 3 4 5 6 7 |
//编辑文件: ~/.ssh/config //在里边添加如下语句: ServerAliveInterval 60 //针对某一服务器的写法: //使用如下选项连接服务器: ssh -o ServerAliveInterval=60 user@sshserver |
本文由 落格博客 原創撰寫:落格博客 » 當SSH遇到“Write failed: 斷管“
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/897.html