ClientAliveInterval ClientAliveMax是用來偵測/決定 Client 是不是存在的設定。
如果沒有收到任何 Client送來的封包,超過 ClientAliveInterval,就會送一個 null request packet 給 client,提醒他。
如果還是沒有收到,等 ClientAliveInterval 後,再送一次。
這樣一直送超過 ClientAliveMax 次之後,就把這個 Client 連線踢掉。
其中,如果有任一次收到,就重新計數。
所以,如果要 1min timeout 的話,有幾種設法:
ClientAliveInterval 10 ClientAliveMax 5或是
ClientAliveInterval 60 ClientAliveMax 0後者的設法,就是不用送 null request 給 client 了,時間到直接切掉。
在 server 端,用 who 可以看到連線的 idle time。
但是這個 idle time 只代表 client 沒有輸入任何 command 的時間(idle)。
跟 沒有收到封包 不一樣。
因為 有些(大部分) ssh client 都會定期送 keepalive 封包給 server。
如果開啟 sshd debug mode (-d)就可以定期看到 (about 30sec)
debug1: Got 100/24 for keepalive debug1: Got 100/25 for keepalive debug1: Got 100/26 for keepalive debug1: Got 100/27 for keepalive如果收到這格,sshd 就會reset ClientAliveInterval 的計數。
但是,who 不會清調 idle 的計數。
所以,只要 ssh client 維持連線,即使不輸入任何東西,sshd 端 who 的 idle 時間超過了 ClientAliveInterval*(ClientAliveMax+1),一樣不會被切掉。
沒有留言:
張貼留言