概要
SSHでサーバーに接続中、操作をしていない時間が長いと勝手に切れていることがあります。
ここでは、そのようなことが起きないようにする設定について紹介します。
SSHが切れる
私はサーバーの操作をする際に、サーバーへSSHを使って接続することが多いです。SSHは、Linuxでは初期状態からインストールされている事が多く、私が利用しているVPSでも、セットアップ後にアクセスする方法としてSSHが用いられています。
SSHで作業をしていると、コマンドを実行したときに、数分程度、反応が返ってこないことがあります。このようなときに、SSHで接続していると、タイムアウトなのか、接続が切れてしまうことがありました。
そのため、サーバーからの反応が長い間返ってこないときは、クライアント側からキーボードで何か入力するなどして、接続が切れないようにしていました。
しかし、調べてみると、クライアント側の設定を変えることで、この問題を解決できることが分かりました。
設定について
SSHで接続が切れるかどうかは、SSHサーバーの設定の場合もありますが、接続時に利用するルーターやファイアウォールの設定が原因ということもあり、原因が多岐に渡る可能性があります。実際に、私が利用しているVPSでは、会社によって自動で切れたり切れなかったりします。
そのため、今回の設定を行ったとしても必ず解決するわけではありません。ご注意ください。
今回紹介する方法は、SSHクライアントで、TCPKeepAliveを設定する方法です。この設定は、クライアント側で行うもので、接続をタイムアウトで切らないために、定期的にサーバーと通信を行うものです。
この設定は、ssh
コマンドのオプションとして設定できないようなので、SSHで接続時に使われる設定ファイルへ記述します。
設定ファイルは、~/.ssh/config
という場所で作成します。
中身は次のようにします。
Host <任意の名前>
Hostname <IPアドレス>
User <ユーザー名>
IdentityFile <SSHの公開鍵認証でつかうファイルのパス>
TCPKeepAlive yes
ServerAliveInterval 180
設定ファイルの書き方について詳しく説明はしません。1行目から4行目はそれぞれの環境に合うように設定を書き換えてください。もしも、公開鍵認証でログインせず、パスワードをログインする度に入力する場合は、4行目を削除してください。
重要な部分は、TCPKeepAliveとServerAliveIntervalです。これらを設定することでサーバーと定期的に通信を行うようになります。ServerAliveIntervalでは、定期的に通信を行う感覚を秒で指定します。180であれば、180秒ごとに行います。
設定ファイルを作成した場合は、sshコマンドで接続する場合に次のようにします。
このようにしないと、せっかく設定した内容が使われず、これまでと同様にタイムアウトが発生してしまいます。
ssh <任意の名前>
ホスト名だけで接続できるので楽ではありますが、ホスト名を覚えておく必要があります。
これで、設定は終わりです。もしも、これでも接続が切れるという場合は、ServerAliveIntervalの秒数を30や60など、小さな値にすると解決するかもしれません。
さいごに
SSHでサーバーの操作時に、途中で接続が切れてしまい、ファイルの編集に失敗するということを何度もしていましたが、今回の設定をすることで、この問題ともおさらばできました。
同じような悩みを抱えている方は、SSHクライアントで設定ファイルを作成する必要はありますが、一度設定してしまえば、その後は何もする必要が無いので、是非設定することをおすすめします。