vol27. ssh 接続問題奮闘記

先日開発のサブPCとして、desktop PC を入手。
そこにLinux をインストールし、メインのLinuxからsshでログインして、サブPCを使用
する環境で作業をしてきた。サブで立ち上げたいGUIアプリは、X forwarding を利用
して、メインPCに飛ばす使い方だ。

ただ環境を構築してから、数日間、ssh connection が切れる問題についてずっと悩
まされてた。

write failed: Broken pipe  

のメッセージを残して、ssh 接続が切れる。

問題解決のために以下のことを実施した。

  1. google 先生に聞いてみると、 ssh サーバーやクライアントの設定で、
    以下をいじると直るとの投稿が多数あるため、試すも効かず。
    ServerAliveInterval
    ServerAliveMax
    ClientAliveInterval
    ClientAliveMax
    TCP keep alive

  2. ssh server 側の/var/log 下のログで、問題発生時に、更新のあったものを全て
    目を通したが怪しいものはない
    ssh client 側も debug オプションを最大にして(-vvv) 試すも、手がかりとな
    るメッセージはない

  3. ssh server 側のネットワークカードを違うもので試したが改善せず
    ハードウェアの問題ではなさそう。

  4. 問題発生時は、ssh server - client 間のping が一定時間(数秒) 繋がらず
    ただ、ssh connection をつないだ状態で、意図的にserver 側のnetwork
    interface をifconfig eth0 down で遮断しても、client 側では、
    ssh でつないだシェルが応答しないだけで、
    write failed: Broken Pipe とはならない。
    よって、何らかの理由でnetwork が一定時間遮断されても問題ないはず。
    そもそも、上記#1の設定がそのような状況に対応するためのものだ。

  5. 異なるssh client マシンで 試しても問題発生
    ssh client 側の問題ではないっぽい。

  6. 以下の投稿を発見。カーネルの問題があるかもしれないとか。
    私の環境では、ssh server にdebian stretch を使っており、
    kernel のversion は4.9.0.6。怪しい。
    https://unix.stackexchange.com/questions/259225/packet-write-wait-broken-pipe-even-leaving-top-running

    そこで、とあるnetwork キャプチャーソフトを使って、問題発生時のTCP port22
    のメッセージを観測していた所、Reset flag がセットされたTCP message が観測さ
    れた!! 上記ブログの通りだ。
    kernel のdriver の問題なのか? stretch で他に利用できるkernel がないか調べ
    たら、4.16.0があったのでそれで試したが、まだ問題発生。
    ダウングレードしないといけないか?

  7. そして、最後にnetwork switch を介さずssh server とclient で直接接続したら、
    !!!問題が発生しなくなった。すくなくとも一晩。
    Ethernet switch の問題?
    だが、違うEthenrnet switch を接続して試しても問題発生。

    うーむ。。。どういうことだ??

    結局今は、Ethernet switch を介さず直接接続で運用しています。