解決したいこと。
sshの接続はしたものの、暫くの間何もしないとsshの接続が切られてしまう場合にsshの接続が切られないようにしたい。
解決方法1 :sshする際にオプションを付ける。
-
hosA(192.168.0.2)にログイン名(login_name)で接続する一般的な例。
ssh login_name@192.168.0.2
-
上記のようにhostA(192.168.0.2)に接続する際に、オプションを付ける。
ssh -o ServerAliveInterval=15 login_name@192.168.0.2
-
上記の「ServerAliveInterval」は、15秒間何も通信が無ければ接続先にレスポンスを求めるオプションです。
解決方法2 :設定ファイルにオプションを書き込む(Windos or Mac)
- Windows10やMacからサーバなどにssh接続を行う場合は、Windows10やMacのssh設定ファイルにオプションを書き込んでおくこともできます。
- Windwos10のssh設定ファイルは、以下のパスにあります。(windows10のユーザ名が「Taro」の場合)
C:UsersTaro.sshconfig
- 上記のパスのファイルを、テキストなどで開き最終行に以下のオプションを追記しておきます。
ServerAliveInterval 15
解決方法3 :設定ファイルにオプションを書き込む(Linux)
-
ssh接続先のサーバー側(ssh接続を待ち受ける側)で設定を行う際には、以下のオプションが使えるようです。
ClientAliveInterval 15
-
サーバ側でssh接続の設定をしている以下のファイルに書き込んでおくとよいでしょう。
/etc/ssh/sshd_config
補足1 :接続先からレスポンスが無い場合について。
-
「ServerAliveInterval」は、指定した秒数(今回の例では15秒)の間に通信が発生ていない場合は、デフォルトで3回まで相手側との通信を試みます。
- つまり、
- 15秒間通信無し --> 通信先へ接続確認を行う --> 通信先からレスポンス有り --> 終了。
- 15秒間通信無し --> 通信先へ接続確認を行う --> 通信先からレスポンス無し --> 15秒後に再度接続を試みる。
- 通信先からレスポンスが無い場合、デフォルトでは3回まで(15秒×3回の45秒後まで)再度接続が試みられます。
-
上記のように、通信相手からレスポンスが無い場合は、デフォルトでは3回繰り返します。
-
通信相手からレスポンスが無い場合に何回まで繰り返すのかは、「ServerAliveCountMax」オプションで変更できます。
- 「ssh -o ServerAliveCountMax=5 (以下省略)」と設定すると、5回まで再度接続が試みられます。
補足2 :FTPソフトのWinSCPを利用している場合。
-
FTPソフトのWinSCPを利用されている場合は、そもそもsshコマンドを使わないかもしれません。
-
FTPソフトのWinSCPを利用されている場合は、WinSCP自体にダミーコマンドを定期的に送信しセッションを維持しておく機能が付いています。
-
以下の例は、「新しいサイト」を設定する際の例です。
- 「新しいサイト」-->「設定」-->「接続」-->「接続の保持」-->「ダミーコマンドを送信する」-->「OK」
- 「新しいサイト」-->「設定」-->「接続」-->「接続の保持」-->「ダミーコマンドを送信する」-->「OK」
参考
https://gist.github.com/koudaiii/dc6ea63fa0258c39987d
https://netmark.jp/2008/11/sshkeepalive.html
https://qastack.jp/superuser/37738/how-to-reliably-keep-an-ssh-tunnel-open
http://man.openbsd.org/ssh_config#ServerAliveInterval