
データセンターのLinuxサーバーにセキュアシェルで接続したのに、(何らかの理由で)リモートのセキュアシェル接続が切断された経験は、これまでに何回ありますか?そのサーバーに再接続した時、発行した重要なコマンドはまだ実行されていますか?それとも、切断された接続によってコマンドが停止してしまったのでしょうか?これは非常に混乱を招くだけでなく、貴重な作業と時間を失う原因にもなりかねません。
幸いなことに、この問題を回避する方法があります。screenコマンドです。screenを使えば、サーバーに再接続し、最後に実行したコマンドから作業を再開できます。このLinux管理ツールの使い方をご紹介します。Ubuntu Server 16.04でデモを行いますが、screenはほぼすべてのLinuxディストリビューションで利用可能です。
screen とは何でしょうか?簡単に言うと、screen は物理端末を複数のプロセス間で多重化するフルスクリーンウィンドウマネージャーです。screen コマンドを呼び出すと、通常通り作業できる単一のウィンドウが作成されます。必要な数のスクリーンを開き、切り替え、デタッチ、一覧表示、再接続を行うことができます。
この便利なコマンドの使用手順を見ていきましょう。
インストール
Ubuntu Server 16.04では、screenツールは既にインストールされています。インストールされていない場合は、コマンドsudo apt install screenでインストールできます。Fedoraをお使いの場合は、コマンドsudo dnf install screenでインストールできます。インストールはこれだけです。
使用法
リモートLinuxサーバーへのセキュアシェル。作業を開始する前に、コマンド screen を実行してください。ようこそウィンドウが表示されます(図A)。
図A

次のように、どの画面でどのコマンドが実行されているかを簡単に覚えられるように、その画面をカスタマイズできます。
screen -S NAME_OF_COMMAND
ここで、NAME_OF_COMMAND は実際に実行するコマンドです。
スペースバーまたは Enter キーを押して、ようこそウィンドウを終了します。これで、標準のプロンプトのようなものが表示されます。コマンドsudo tail -f /var/log/syslogを発行してみましょう。 tail コマンドは、(予想どおりに)syslog ログ ファイルへの入力の追跡を開始します。 次に、[Ctrl]+[a]+[c] キーの組み合わせを押して、新しい画面を開きましょう。これで新しいプロンプトが表示されます。次に、コマンドping 192.168.1.208(サーバーの IP アドレスを挿入)を使用して、サーバーに ping を実行してみましょう。 この ping の実行中、[Ctrl]+[a]+[p] キーの組み合わせ(前の画面に切り替わる)で前の画面に戻ることができます。これでsudo tail -f /var/log/syslog画面に戻るはずです。[Ctrl]+[a]+[n] キーを押す(次の画面に切り替わる)と、ping コマンドに戻ります。
しかし、接続が失われたらどうなるでしょうか? コマンドは失われますか? いいえ。コマンド screen -ls を発行すると、2 つの画面がリストされます (図 B )。
図B

各画面にはセッションIDが割り当てられており、これを使用して再接続できます。つまり、セッションIDは以下のとおりです。
- 2216.pts-0.ubuntu16
- 2067.pts-0.ubuntu16
次のようなコマンドを使用して、これらの画面のいずれかに再接続できます。
screen 2216.pts-0.ubuntu16
一つ問題がありそうなのは、再接続できるのは「切断済み」と表示されているスクリーンのみだということです。これは、スクリーンがネットワークの切断を検出した場合に発生します。切断されたがスクリーンがまだ切断されていない場合は、次のコマンドで手動で切断・再接続できます。
screen -rd 2216.pts-0.ubuntu16
あるいは、最初にscreen -S kernel-compileコマンドでスクリーンを起動したとします。そのスクリーンに再接続するには、次のコマンドを使用します。
screen ID.kernel-compile
ID は 4 桁の ID 番号です。
画面が切り離されていない場合は (図 C )、次のコマンドで再接続できます。
screen -rd ID.kernel-compile
ここで、ID は画面 ID 番号です。
図C

ターミナルから離れる必要があるものの、コマンドの実行を継続したい場合は、[Ctrl]+[a]+[d]キーの組み合わせで手動で画面をデタッチし、後で再接続することができます。これにより、標準のプロンプトに戻ります。
最後に、画面を終了するには、exitコマンドを入力するだけで標準のbashプロンプトに戻ります。画面の操作が終わったら、必ず再接続し、コマンドを終了して終了してください。
必ず使うコマンド
Linuxサーバーに頻繁にリモートアクセスし、不安定なネットワーク接続によってコマンドライン作業が失われないようにしたい場合は、screenコマンドが必須です。screenコマンドの機能について詳しくは、man screenコマンドを実行してマニュアルページをご覧ください。