Raspberry PiのSSHサーバーにいつの間にか接続できなくなってたので調査。
結論から言うと、クライアント側に IPQoS=none の設定を加えればOK
現象
SSH接続しようとすると応答がなくタイムアウトする。
-vvvを付与してログを確認すると、以下の出力のタイミングで処理が止まっている。(debug3のログのため-vvでは確認できず)
debug1: Connecting to 192.168.0.9 [192.168.0.9] port 22. debug3: set_sock_tos: set socket 3 IP_TOS 0x48
組み合わせ
- SSHサーバー1 (Raspberry Pi 5)
- Debian GNU/Linux 12 (bookworm)
- OpenSSH_9.2p1 Debian-2+deb12u7, OpenSSL 3.0.17 1 Jul 2025
- SSHサーバー2 (Raspberry Pi 4)
- Raspbian GNU/Linux 11 (bullseye)
- OpenSSH_8.4p1 Raspbian-5+deb11u5, OpenSSL 1.1.1w 11 Sep 2023
- SSHクライアント
うちに2台あるRaspberry Pi(上記1と2)のどちらにもクライアントのFedoraから接続しようとすると途中で止まる、という状態。
ただし他のクライアントからだとラズパイSSHサーバーに接続できるし、Fedoraからは他のSSHサーバーへは接続できるので、組み合わせが悪い…としか言えない状態。
おそらく~/.ssh/configでなく/etc以下の設定ファイルのどこかに接続失敗の原因となる記述があると思うけど、そこまでは未確認。
対策
検索したところいくつかヒットしたが、以下で回避できた。
sshのオプションとして使用する場合は以下。
ssh user@server -o IPQoS=none
.ssh/configに記述するなら以下の通り。
Host server-name
HostName 192.168.0.9
IdentityFile ~/.ssh/id_rsa_server
IPQoS none
補足
この現象(エラー「set_sock_tos: set socket 3 IP_TOS 0x48」発生時)は必ずしもIPQoSの設定で回避できるのかというと微妙で、例えばRed HatのナレッジにはNetworkManagerの設定不備があるとタイムアウトするという情報がある。
また、IPQoSについての設定はフレッツ環境において多く回避策としてヒットしているが、現象がおそらく異なる。