2021/12/21

sshd ClientAliveInterval, ClientAliveMax

sshd 的 config file (sshd_config),有兩項設定:
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),一樣不會被切掉。

沒有留言:

張貼留言