サーバー管理者にとって、離れた場所からサーバーを遠隔操作することはルーチン業務の一つです。そのとき必須のツール/コマンドが「ssh」です。
本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。
なお、本連載では、執筆時点の最新版Red Hat Enterprise Linux(RHEL)およびCentOS環境で動作を確認しています。解説では「Bash」シェルを使ったサンプルを示しています。コマンドのサンプルなどで一部環境に依存した出力例となる場合がありますので、その際には適宜ご自身の環境に合わせて読み替えてください。また、本稿に出現するネットワーク通信特有の用語については「用語解説」の項目を設けて別途補足しています。本文と併せて理解に役立ててください。
今回は「SSH(Secure Shell)」通信でリモートホストを操作する「ssh」コマンドを紹介します。
管理者にとって、離れた場所からサーバーを遠隔操作することはルーティン業務の一つです。そのとき必須のツール/コマンドがsshで、このコマンドなしに安全に遠隔操作を行うことは困難です。ただし、このコマンドの利用には公開鍵と秘密鍵が欠かせないため、「ssh-keygen」コマンドを利用するなどして事前に作成しておく必要があります。
なお、本稿では、大文字で「SSH」と表記した場合はプロトコルを、小文字で「ssh」と表記した場合はコマンドを指します。
SSHは暗号技術を使い、リモートホストで安全にコマンドを実行するためのプロトコルで、「ssh」はそのプロトコルを利用してリモートサーバーを遠隔操作するコマンドです。歴史的には、「rsh(リモートシェル)」および「rlogin」コマンドのセキュア版として位置付けられており、書式および機能には互換性があります。
sshでは、通信内容の暗号化と復号化に「共通鍵暗号」を利用します。暗号化・複号のためにサーバーとクライアントが同じ鍵(共通鍵)を持たねばならず、通信のたびにランダムな共通鍵を作成してサーバー/クライアント間で受け渡します。そして、安全に共通鍵を暗号化する目的で「公開鍵暗号」が利用されます。
そのため、クライアント側に秘密鍵をそれぞれ用意しておきます。「ssh-keygen」コマンドの利用方法は、以下の記事を参考にしてください。
引数として与えるコマンドを省略すると、リモートホスト(SSHサーバー)に指定したユーザー名でログインします。あたかも手元(ローカル)のマシンでシェルを操作するかのように扱えるため、この方法でsshコマンドを利用することが一般的です。
なお、SSHプロトコルのバージョンには「1」と「2」の2種類があり互換性はありませんが、OSを問わず現在利用されているsshコマンドのほとんどが両方のバージョンに対応しており、明示することで使い分けが可能です(デフォルトは「2」)。
sshコマンドの主なオプションは次の通りです。
オプション | 意味 |
---|---|
-C | データを圧縮する |
-c | 暗号方式を指定する |
-i | RSAまたはDSA認証の秘密鍵ファイルを指定する |
-l | ログインするユーザー名を指定する |
-p | 接続ポートを指定する |
-X | X11ポートフォワードを有効にする |
-x | X11ポートフォワードを無効にする |
なお、一般的なLinuxディストリビューションが採用しているSSHサーバー/クライアント環境であるOpenSSHでは、次のような暗号化方式に対応しています(表2)。主要な方式の解説は用語解説の通りです。
暗号化方式 | 引数の記述方法 |
---|---|
トリプルDES(CBCモード) | 3des-cbc |
AES(128ビット CBCモード) | aes128-cbc |
AES(192ビット CBCモード) | aes192-cbc |
AES(256ビット CBCモード) | aes256-cbc |
AES(128ビット CTRモード) | aes128-ctr |
AES(192ビット CTRモード) | aes192-ctr |
AES(256ビット CTRモード) | aes256-ctr |
RC4 | arcfour |
RC4(128ビット) | arcfour128 |
RC4(256ビット) | arcfour256 |
Blowfish(CBCモード) | blowfish-cbc |
CAST(128ビット CBCモード) | cast128-cbc |
リモートホスト(SSHサーバー)にログインする場合は、「ユーザー名@ホスト名(IPアドレス)」の書式で、ログインするアカウントを指定します。
公開鍵をリモートホストの所定のファイル(通常は「$HOME/.ssh/authorized_keys」)に登録しておくと、公開鍵認証により自動ログインすることも可能ですが、未登録の場合はパスワードの入力を求められるので、ログインするアカウントのパスワードを入力します。
ログイン後は、リモートホスト側で設定しているシェルが起動するので、ローカル同様に作業します。シェルを終了するとログアウト処理が行われ、sshコマンドが終了します。なお、authorized_keysファイルで、目的のホストの行頭に「command="/bin/zsh"」などと記述しておくと、ログイン時に実行するシェル(この場合zsh)を指定できます。
$ ssh shinobu@192.168.12.10 shinobu@192.168.12.10's password: Last login: Sun Feb 8 07:39:53 2015 from 192.168.12.7 [shinobu@mylinux ~]$
sshコマンドは、リモートホストにログインするだけでなく、リモートホスト上でコマンドを実行できます。引数部分に実行したいコマンドラインを指定して実行すれば、認証が完了次第リモートホスト側で実行されます。
また、ローカルとリモートの間でリダイレクトを行うこともできます。例えば、以下の要領でsshコマンドを実行すると、ローカルにあるファイル(local.txt)の内容がリモートホストへ転送され、リモート側で「cat」コマンドに入力された上で「remote.txt」というファイルへリダイレクトされます。この仕組みを使えば、公開鍵のリモートホストへの転送/登録もコマンドライン1行で完了します。
$ ssh shinobu@mylinux 'cat > remote.txt' < local.txt
$ ssh shinobu@mylinux 'cat >> $HOME/.ssh/authorized_keys' < $HOME/.ssh/id_rsa.pub
本稿で言及したコマンドに関連するネットワーク用語は次の通りです。必要に応じて参考資料も確認して理解を深めましょう。
データ暗号化技術の一つ。1970年代に米国で作られた規格です。暗号化に利用する鍵長が56ビットと短いため、現代の計算機能力から見ると脆弱(ぜいじゃく)であると言われることもあるようですが、アルゴリズム上は安全とされています。このため、「トリプルDES(3DES)」という方式で、より堅固にする手法も考案されています。
DESの代用として考案された暗号化技術。本稿で解説しているオプションでは、下記「暗号化利用モード」と鍵長の組み合わせがいくつかあります。DESを利用してきた米国において、AESを新たな暗号化標準に定めたこともあり、現在、事実上の標準はAESとなっています。
ssh-keygenコマンドで利用できる暗号利用モードはCBC(Cipher Block Chaining)モード、CTRモード(Counter Mode)があります。
暗号化処理の単位ブロックを越えた平文を暗号化する場合、暗号化処理を繰り返し実行しますが、それぞれの「モード」は暗号化処理の繰り返し方の違いを意味しています。
CBCモードで繰り返し暗号化を行う場合、直前の暗号化ブロックの情報を利用します。このため、一部の暗号化ブロックが欠損した場合に複号できなくなる可能性があります。
一方、CTRモードは、カウンターを利用し、カウンターを暗号化した暗号化ブロックを使います。ぞれぞれの技術的差異詳細については、高度な話題となるため、ここでは言及しません。
Copyright © ITmedia, Inc. All Rights Reserved.