1. 概要

アプリケーションを実行し続けるため、または使用していたSSHウィンドウに戻ったときのフラストレーションを避けるために、SSHセッションを存続させる必要がある場合があります。

このチュートリアルでは、SSHセッションがタイムアウトにならないようにするか、ターミナル/ bashウィンドウを物理的に閉じるまで、SSHセッションを存続させる方法を見ていきます。

2. SSHが接続を閉じるのはなぜですか?

SSHを使用してサーバーに接続するには、ターゲットサーバーでsshデーモン(sshd)が実行されている必要があります。 クライアントがサーバーに定期的に情報を送信しない場合、サーバーは一定の時間が経過した後に接続を閉じます。

サーバーがSSH接続を閉じないようにするために、クライアントマシンまたはサーバーのいずれかで構成ファイルを構成できます。

3. 構成ファイルの設定

クライアント側かサーバー側かに応じて、SSHセッションがタイムアウトにならないように更新できるファイルがいくつかあります。

3.1. クライアント側の構成ファイル

クライアント側の構成ファイルの場所は$HOME / .ssh /configです。 ターミナルを開いてcat$ HOME / .ssh / config と入力すると、「ファイルが見つかりません」というメッセージが表示される場合があります。

$ cat $HOME/.ssh/config
cat: /.ssh/config: No such file or directory

上記のメッセージが表示された場合は、構成ファイルを手動で作成する必要があります。 まだ存在しない場合は、最初に.sshフォルダーを作成することでこれを行うことができます。

$ mkdir $HOME/.ssh

このフォルダがすでに存在する場合は、「ファイルが存在します」というメッセージが表示されます。 フォルダが存在しなかった場合、出力は表示されません。 いずれにせよ、これで構成ファイルを作成する準備が整いました。 これを行うには、タッチコマンドを使用します。

$ touch $HOME/.ssh/config

構成ファイルを作成したら、 chmodコマンドも実行して、ファイルが誰でも読み取れないことを確認する必要があります。

$ chmod 600 $HOME/.ssh/config

nanoやvimなどのテキストエディタを使用してすることで、ルールを構成ファイルに追加できるようになりました。 nano $ HOME / .ssh / config を実行することにより、ターミナル/bashウィンドウ内の基本的なテキストエディターで構成ファイルを開きます。

次に、構成に2、3行追加します。

Host example
    Hostname example.com
    ServerAliveInterval 240

この構成は、SSHセッションがサンプルドメインに接続されている場合にのみ適用される設定を指定しています。

ServerAliveInterval は、クライアントがサーバーに信号を送信するまでの秒数です。

上記のテキストをエディターに入力したら、 Ctrl + O を押してから、 [Enter] を押して、前の手順で作成した構成ファイルを上書きする必要があります。 次に、nanoを終了するには、 Ctrl +Xを押す必要があります。

または、example*に置き換えて、SSH経由で接続するすべてのドメインにこのルールを設定することもできます。

Host *
    ServerAliveInterval 240

nano を使用して構成ファイルを開いて保存するのと同じ手順を使用して、これを行うことができます。

3.2. サーバー側の構成ファイル

状況によっては、サーバー上の構成ファイルにアクセスできる場合があります。 その場合は、サーバーでSSH接続を閉じるタイミングを構成できます。

サーバー上の構成ファイルを編集するプロセスは、クライアント側の構成ファイルと似ていますが、いくつかの違いがあります。

まず、サーバー側の構成ファイルのファイルの場所は / etc / ssh /sshd_configです。

次に、 nano を使用して、ClientAliveIntervalキーワードを構成ファイルに追加します。

このキーワードでは、前の例で見たように「サーバー」ではなく「クライアント」が使用されていることに注意してください。

ClientAliveInterval 60

ClientAliveInterval は、秒単位で指定されたタイムアウト間隔です。 サーバーがクライアントからデータを受信してからの時間がタイムアウト間隔を超えると、サーバーはクライアントにメッセージを送信して応答を要求します。

3.3. 切断しないように設定してみませんか?

SSHセッションを切断しないように設定したくなるかもしれませんが、SSHのタイムアウトを設定する方が賢明な場合があります。

接続するサーバーが自分で管理しているサーバーである場合、タイムアウトを設定する強い理由はない可能性があります。 ただし、 AWS E3 などのプラットフォームでサーバーをホストしている場合、タイムアウトを設定しないと、コストがかかる可能性があります。 これらのクラウドホスティングプラットフォームの多くは、サーバーの使用に対して1分ごとに課金され、SSHセッションを継続的に稼働させ続けると、アクティブに使用していなくてもコストが高くなる可能性があります。

クライアントでタイムアウトを構成するには、上記と同じ構成ファイルでServerAliveCountMaxキーワードを使用できます。

Host *
    ServerAliveInterval 240
    ServerAliveCountMax 2

クライアントに240秒ごとにシグナルを送信し続ける代わりに、クライアントはサーバーからのシグナルをリッスンするようになりました。 シグナルを返さずにServerAliveIntervalを2回通過すると、SSHセッションが閉じられます。

同様に、サーバーに同様の構成を設定できます。

ClientAliveInterval 60
ClientAliveCountMax 2

これにより、サーバーからクライアントに60秒ごとに信号が送信されます。 クライアントからシグナルを返さずにClientAliveIntervalを2回通過すると、サーバーはSSHセッションを閉じます。

これは通常、クライアントとサーバー間のネットワーク切断が原因です。

ほとんどの場合、クライアント構成はサーバーのデフォルトのタイムアウトよりも低い値に設定する必要があります。サーバーでは接続の終了がデフォルトで無効になっているため、この動作を変更したくない場合は、サーバー構成を調整する必要はありません。

ServerAliveCountMaxまたはClientAliveCountMaxに値が指定されていない場合、デフォルト値の3が両方に適用されます。

4. 結論

この記事では、クライアント側とサーバー側の両方のマシンでSSH設定の構成ファイルを作成する方法を学びました。 次に、SSHセッションのタイムアウトを防ぐ構成を確認しました。 最後に、まとめとして、SSHセッションを切断しないように設定するべきではない理由のいくつかを調べました。

構成ファイルの追加オプションの詳細については、クライアント側のmanファイルまたはサーバー側のmanファイルを参照してください。