paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

Ubuntu24.04のsshハングを解消する

古いIntelNUCをサブPCとして使っているのですが最近ssh接続が勝手に切れてハングアップするという挙動が起きていました。

こんな感じでpingで監視しててもいきなりタイムアウトして繋がらなくなります。
192.168.0.29がUbuntuのIPです。
古い筐体だし新しいOSとの相性が悪いのか?とも思います。

192.168.0.29 からの応答: バイト数 =32 時間 =1ms TTL=64
192.168.0.29 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.29 からの応答: バイト数 =32 時間 =1ms TTL=64
192.168.0.29 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.29 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.29 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.29 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.29 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.29 からの応答: バイト数 =32 時間 =1ms TTL=64
192.168.0.29 からの応答: バイト数 =32 時間 <1ms TTL=64
要求がタイムアウトしました。
要求がタイムアウトしました。
192.168.0.38 からの応答: 宛先ホストに到達できません。
192.168.0.38 からの応答: 宛先ホストに到達できません。
192.168.0.38 からの応答: 宛先ホストに到達できません。
要求がタイムアウトしました。
192.168.0.38 からの応答: 宛先ホストに到達できません。
192.168.0.38 からの応答: 宛先ホストに到達できません。
192.168.0.38 からの応答: 宛先ホストに到達できません。
192.168.0.38 からの応答: 宛先ホストに到達できません。
192.168.0.38 からの応答: 宛先ホストに到達できません。

サブ機なので大した問題ではないのですが、こうなると強制リブートするしかないので気軽に使えないのは困ります。 というわけで事象解決させました。

筐体情報

ハードウェアはこんな感じ。

❯ neofetch --off
masashi@ubuntu-nuc6cays 
----------------------- 
OS: Ubuntu 24.04.3 LTS x86_64 
Host: NUC6CAYS J26847-405 
Kernel: 6.8.0-88-generic 
Uptime: 20 hours, 50 mins 
Packages: 2689 (dpkg), 40 (snap) 
Shell: zsh 5.9 
Resolution: 1280x1024 
Terminal: /dev/pts/2 
CPU: Intel Celeron J3455 (4) @ 2.300GHz 
GPU: Intel HD Graphics 500 
Memory: 1673MiB / 7274MiB 

切り分け

過去にディスプレイのスイッチャーを使って操作時に切り替えていたのですが切り替えるとこれまたOSがハングするんですよね。
色々調べるとNUCのHDMI端子は結構トラブルが多いらしくてスイッチャーはやめてリモートアクセスのみにしました。
しばらくは問題なかったのですが最近sshもハングするようになってしまいました。困った。

とりあえず再起動後少しの時間アクセスできるので溜まっていたパッケージのアップグレードを実施。解消せず。
dmesg, /var/log/kern.log, /var/log/syslog系のログを見ても怪しいもの無し。

この辺も怪しいですよね。
結果違ったのですが、OSのアップグレードも考えました。

https://www.reddit.com/r/Ubuntu/comments/1dbt03y/ubuntu_2404_lts_freezes_randomly_sometimes/?tl=ja

切り分けのため久しぶりにディスプレイにつなぎました。
画面は取ってませんがこれだと普通に起動OKでGUIGNOMEもログインできるしハングアップする様子もありません。
OSの調子が悪いわけじゃなくリモートアクセス系のトラブルかなと思い、以下の記事にたどり着きました。

askubuntu.com

OSバージョンは違いますが事象が似ています。
なので修正してみることにしました。

sshd_conf修正

記事の通りTCPKeepAliveとClientAliveIntervalをコメントアウトしてsshd再起動。

grep -iE 'tcpkeep|clientaliveinter' /etc/ssh/sshd_config
TCPKeepAlive yes
ClientAliveInterval 100

セッション維持系のパラメータですね。

解消

pingまでタイムアウトになっていたのは原因不明ですが、今のところsshのハングはなくなり安定して接続できてます。(というか繋ぎっぱなしですが)

キャプチャで見るとキープアライブはわかりませんが100秒おきに通信が発生しておりこれがClientAliveのパケットですね。

複合化して中身見てみたかったのですがsshの複合化は少し大変そうなので今回は割愛。
とりあえず直ってよかった。