SSHで長時間操作していない場合にログアウトしないようにする方法

目次

概要

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クライアントで設定ファイルを作成する必要はありますが、一度設定してしまえば、その後は何もする必要が無いので、是非設定することをおすすめします。