事象
例えば、EC2 の Amazon Linux に ssh で接続して実行時間の長い*1コマンドを実行しているとタイムアウトして以下のメッセージが出力される。
packet_write_wait: Connection to **.***106.21 port 22: Broken pipe
解決策
クライアント(自分の場合は Mac)の ~/.ssh/config に以下を追記する。
ServerAliveInterval 60
上記の設定の場合、60秒間隔で Keep Alive のパケットが送信され、タイムアウトしなくなる。
参考
ServerAliveInterval Sets a timeout interval in seconds after which if no data has been received from the server, ssh(1) will send a message through the encrypted channel to request a response from the server. The default is 0, indicating that these messages will not be sent to the server.
*1:かつ実行中に通信が発生しない