Posted at: 2018-05-04 08:28:53  Category: tech


数TBに及ぶファイルのダウンロードをSFTPでやっている際、途中でコネクションが
切れまくってしまう事象に遭遇しました。

SFTP(SSH File Transfer Protocol)はssh上でファイルをコピーする仕組みですので、
SSHの設定を変えてあげることで対応することができそうです。

sftpのmanを見ると下記のような記載があり、コマンドラインからなんとかできそうです。
特に、ServerAliveInterval、ServerAliveCountMax、TCPKeepAliveあたりが使えそうです。
-o ssh_option
Can be used to pass options to ssh in the format used in
ssh_config(5). This is useful for specifying options for which
there is no separate sftp command-line flag. For example, to specify
an alternate port use: sftp -oPort=24. For full details of the options
listed below, and their possible values, see ssh_config(5).

ServerAliveInterval
ServerAliveCountMax
TCPKeepAlive


ssh_configでTCPKeepAliveの意味を確認すると、これが有効だと結構敏感に接続断を判断してしまう様なので、これをoffにしてみます。

しかし、何らかの理由によりサーバー側が応答しなくなってしまったような事象は正しく判断したいので、
ServerAliveIntervalとServerAliveCountMaxの値を設定します。
前者で指定したインターバルで接続先の生死を確認し、後者で指定した回数に達した場合は接続断となるようです。

これで様子をみたいと思います。