SSH は、リモートコンピュータに安全にアクセスするための UNIX ベースのコマンド群/プロトコルです。SSH は、電子証明書とパスワードの暗号化を利用して、接続の両端で認証を行うことにより、ネットワーク上のクライアントとサーバーの通信を保護します。また、RSA 公開鍵暗号を使用して接続と認証を管理します。SSH は、Telnet やほかのシェルベース通信方式よりも安全性が高く、Web サーバーなどのリモートサーバーの管理に使用されます。
ほかの接続タイプと異なり、2 つの N1 Service Provisioning System 5.1 アプリケーション間に SSH 接続を設定した場合、ダウンストリームのアプリケーションは手動で起動する必要がありません。ダウンストリームのアプリケーションは、必要な場合にアップストリームのアプリケーションによって自動的に起動されます。ダウンストリームのアプリケーションは、使用されている間は継続して動作しますが、一定の時間 (この時間は設定可能) 使用されないと自動的に停止します。
SSH 接続では、ダウンストリームのアプリケーションの手動起動は行わないでください。たとえば、SSH を使用してリモートエージェントに接続するようにローカルディストリビュータを設定した場合、リモートエージェントを手動では起動しないでください。ローカルディストリビュータは、必要時にリモートエージェントを自動的に起動します。リモートエージェントは、使用されている間は継続して作動します。リモートエージェントが一定時間使用されなかった場合、ローカルディストリビュータは自動的にリモートエージェントを停止します。
SSH は構成時に、ssh-agent を使用するか、空のパスワード鍵を使用するかを選択できます。空のパスワード鍵を使用すると、生成された SSH 非公開鍵は空のパスワード付きで格納されます。この結果、この非公開鍵はパスワードなしでアクセスできます。公開鍵を信頼するほかのマシンとの通信に SSH を使用する場合、パスワードの入力は求められません。ssh-agent を使用する場合は、生成される非公開鍵はセキュリティー保護されたパスワードと共に格納され、安全なメディアに格納されます。ほかのマシンと通信を行うときは、ssh-agent を起動し、安全なメディアから非公開鍵をアップロードし、パスワードを入力します。非公開鍵はファイルシステムには格納されず、ssh-agent プロセスのメモリー内に格納されます。
ssh-agent を使用する場合、非公開鍵はマスターサーバー上でしか実行されない ssh-agent によって格納されます。ネットワーク上のほかのマシンには公開鍵が配布されます。認証が必要な SSH アプリケーションは、ssh-agent と通信して認証を行います。認証のためにマスターサーバーで実行されている ssh-agent に対してローカルディストリビュータからプロキシ設定が行えるように中間的な SSH 接続するには、ssh-agent の転送機能を有効にする必要があります。ローカルディストリビュータは、ssh-agent の転送機能を使用してダウンストリームのローカルディストリビュータとリモートエージェントに認証情報を渡します。この方法は、前述の方法よりも安全です。また、N1 Service Provisioning System 5.1 で ssh-agent を使用するように構成した方が、空のパスワードを設定するよりも簡単です。
空のパスワードを使用すると、非公開鍵はパスワードなしでマシンのファイルシステム上に格納されます。非公開鍵は、SSH 通信を開始するすべてのマシン上に置く必要があります。N1 Service Provisioning System 5.1 の場合、SSH を使用してダウンストリームのアプリケーションに接続しているマスターサーバーとローカルディストリビュータはすべて、非公開鍵を持っていなければなりません。この方法は安全性に劣ります。
N1 Service Provisioning System 5.1 には、次の SSH 機能が必要です。
ssh によるリモートコマンド呼び出し
公開 / 非公開鍵ペアによる認証
BatchMode yes インタラクション (オペレータの介入なしで ssh コマンドを呼び出す機能) のサポート
ssh-agent を使用する場合は、次の SSH 機能が必要です。
ssh-agent のサポート
SSH における ssh-agent 転送機能のサポート。Open SSH での -A オプションの使用
SSH 接続を行うようにマシンを構成する場合は、次の機能が役に立ちます。ただし、これらは必須機能ではありません。
リモートコマンドを呼び出す時の tty の強制割り当て。OpenSSH での -t オプションの使用
ssh エージェントの強制終了。OpenSSH での ssh-agent コマンドの -k オプションの使用
高度なセキュリティーを実現する RSA 鍵の生成。OpenSSH で - t rsa を使用します。
次のチェックリストを使用し、SSH の実装が N1 Service Provisioning System 5.1 の要件を満たしているか確認してください。
ssh-keygen コマンドは、SSH 呼び出しの認証に使用できる 公開 / 非公開鍵ペアを生成する必要があります。
追加情報なしでホスト鍵の交換やパスワードの取得が可能な指定のホストで、認証用非公開鍵がパスワードなしで (または空のパスワード付きで) 生成された場合、次の ssh コマンドを実行できる必要があります。
% ssh –o `BatchMode yes' hostname |
パスワード付きで生成された非公開鍵を使用してアップロードされた現在のホストで ssh-agent を実行し、現在のホストから host1、host2、host3 へとホップしたとします。このあと、追加情報なしでホスト鍵の交換やパスワードの取得が可能な場合、次の ssh コマンドを実行できる必要があります。
% ssh –o `BatchMode yes' –A host1 ssh –o `BatchMode yes' –A host2 ssh –o `BatchMode yes' host3 |
ssh コマンドは、その標準の入出力とエラーストリームを、リモートマシンで実行されているコマンドに対して正しくパイプできる必要があります。
ssh-add コマンドは、パスワード付きの非公開鍵を認証用として ssh-agent にアップロードできる必要があります。
SSH を使用してリモートエージェントを起動する場合、リモートエージェントは jexec ラッパーを使用して Java 仮想マシンを起動します。このラッパーはスーパーユーザー (root) が所有するネイティブの実行可能ファイルであり、setuid ビットセットを持っています。このファイルはリモートエージェントのインストールに使用したユーザーと同じグループ ID を持ち、このグループに実行許可を与えます。このファイルは、リモートエージェントのインストールに使用したユーザーアカウントが所有する protect というディレクトリに保存されます。このファイルの実行許可が与えられるのは、リモートエージェントを所有するユーザーだけです。ほかのユーザーは jexec ラッパーを実行できません。
どのような場合でも jexec と protect のファイルアクセス権が誤って変更されることがないように対策を施す必要があります。
jexec のセキュリティーは、次の変更を加えることによって強化できます。
JVM 実行ファイル (通常、シェルスクリプト) はアプリケーションを所有するスーパーユーザー (root) またはユーザーによって所有されるようにし、ほかのユーザーやグループには書き込み許可を与えないないようにします。N1 Service Provisioning System 5.1 で JRE をインストールする場合は、N1SPS5.1-home /common/jre 内の全ファイルがアプリケーションを所有するユーザーによって所有されるようにし、ほかのどんなユーザーやグループにも書き込みアクセス権を与えないようにします。
アプリケーションを所有するユーザーのユーザー ID は、SSH を使用したログインにだけ許可します。SSH を使用してログインする場合は、公開鍵認証だけを許可します。ほかのどんなユーザーまたはグループにも、/N1SPS5.1-home /.ssh ディレクトリに対するいかなるアクセス権も付与しません。
etc/sshd_config ファイルにパスワード認証を無効にする次の行を含めることにより、公開鍵認証だけを許可するように SSH サーバーを構成します。
PasswordAuthentication no |
etc/sshd_config ファイルに、RhostsRSAAuthentication を含む行が存在しないようにします (デフォルトではこの認証が許可されていないため)。さらに、RSAAuthentication という語が存在する場合は、この値を yes (デフォルト) に設定する必要があります。
リモートエージェントのセキュリティーをさらに強化する場合は、/N1SPS5.1-home/.ssh/authorized_keys2 ファイルを編集し、マスターサーバーの公開鍵が含まれる行の前に次のテキストを追加します。
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty |
詳細については、sshd(1M) のマニュアルページを参照してください。