Solaris のシステム管理 (セキュリティサービス)

Solaris Secure Shell の使用

公開鍵と非公開鍵のペアを作成する方法

Solaris Secure Shell の公開鍵と非公開鍵のペアを作成するときの、標準的な手順について説明します。追加のオプションについては、ssh-keygen(1) のマニュアルページを参照してください。

  1. 鍵の生成プログラムを起動します。


    myLocalHost% ssh-keygen
    Generating public/private rsa key pair.
    ...
  2. 鍵が格納されるファイルのパスを入力します。

    デフォルトでは、RSA v2 の鍵を表すファイル名 id_rsa がカッコ内に表示されます。このファイルを選択するときは、Return キーを押します。また、別のファイル名を入力することもできます。


    Enter file in which to save the key(/home/johndoe/.ssh/id_rsa): 
    <Return キーを押す> 
    

    公開鍵の名前が自動的に作成されます。公開鍵名の末尾に文字列 .pub が追加されます。

  3. 鍵に使用するパスフレーズを入力します。

    このパスフレーズは、非公開鍵を暗号化するときに使用されます。パスフレーズは、10 〜 30 文字の英数字を混在させて指定してください。単純な英語の文や英語の名前の使用は避けてください。空文字入力は、パスフレーズを使用しないことを意味します。空文字入力は、ユーザーアカウントには極力避けてください。入力したパスフレーズは表示されません。


    Enter passphrase(empty for no passphrase):  <パスフレーズを入力>
    
  4. 確認のためにパスフレーズを再入力します。


    Enter same passphrase again: <パスフレーズを入力>
    Your identification has been saved in /home/jdohnoe/.ssh/id_rsa.
    Your public key has been saved in /home/johndoe/.ssh/id_rsa.pub.
    The key fingerprint is:
    0e:fb:3d:57:71:73:bf:58:b8:eb:f3:a3:aa:df:e0:d1 johndoe@myLocalHost
  5. 結果を確認します。

    鍵のフィンガープリント (コロンで区切られた 2 桁の 16 進数値列) が表示されます。鍵へのパスが正しいことを確認します。この例では、パスは /home/johndoe/.ssh/id_rsa.pub です。この時点で公開鍵と非公開鍵のペアが作成されました。

  6. 通信先のホスト上で authorized_keys ファイルを設定します。

    1. id_rsa.pub ファイルを通信先ホストにコピーします。次のコマンドを入力します (ただし、バックスラッシュなしで 1 行に入力)。


      myLocalHost% cat $HOME/.ssh/id_rsa.pub | ssh myRemoteHost \
       'cat>> .ssh/authorized_keys && echo "Key uploaded successfully."'
      
    2. プロンプトが表示されたら、ログインパスワードを入力します。

      ファイルのコピーが完了すると、“Key uploaded successfully.” というメッセージが表示されます。

Solaris Secure Shell を使用して別のホストにログインする方法

  1. ssh コマンドを使用して、リモートホストの名前を指定します。


    myLocalHost% ssh myRemoteHost
    
    ssh コマンドを初めて実行した場合、次のように、リモートホストの認証を求めるプロンプトが表示されます。


    The authenticity of host 'myRemoteHost' can't be established.
    RSA key fingerprint in md5 is: 04:9f:bd:fc:3d:3e:d2:e7:49:fd:6e:18:4f:9c:26
    Are you sure you want to continue connecting(yes/no)? 

    このプロンプトは正常です。yes を入力して処理を続行します。このリモートホストで ssh を使用したことがあるのにこのプロンプトが表示される場合は、正常ではありません。セキュリティ違反が発生していないか確認する必要があります。

  2. Solaris Secure Shell のパスフレーズとアカウントのパスワードを要求するプロンプトが表示されたら、これらを入力します。


    Enter passphrase for key '/home/johndoe/.ssh/id_rsa': <Return キーを押す> 
    johndoe@myRemoteHost's password: <Return キーを押す>
    Last login: Fri Jul 20 14:24:10 2001 from myLocalHost
    myRemoteHost%

    リモートホストでトランザクションを実行します。ユーザーが送信するコマンドはすべて暗号化されます。ユーザーが受信する応答はすべて暗号化されます。


    注 –

    パスフレーズを後で変更する場合は、 ssh-keygen コマンドに -p オプションを指定して使用します。


  3. リモートセッションが完了したら、exit を入力するか、通常の方法でシェルを終了します。


    myRemoteHost% exit
    myRemoteHost% logout
    Connection to myRemoteHost closed
    myLocalHost%

パスワードを使用せずに ssh-agent コマンドを使用してログインする方法

Solaris Secure Shell を使用するときに、パスフレーズとパスワードを省略する場合は、エージェントデーモンを使用します。セッションを開始するときに、ssh-agent コマンドを使用してください。次に、エージェントを使用して非公開鍵を格納するために、ssh-add コマンドを使用します。ホストごとにアカウントが異なる場合は、セッションで使用する非公開鍵を追加します。

エージェントの起動は、次の手順で説明するように、必要に応じて手動で行うことができます。各セッションを開始するときに、エージェントが自動的に動作するように設定することもできます (ssh-agent コマンドが自動的に動作するように設定する方法を参照)。

  1. エージェントデーモンを起動します。

    ssh-agent コマンドがエージェントデーモンを起動し、そのプロセス ID が表示されます。


    myLocalHost% eval `ssh-agent`
    Agent pid 9892
    myLocalHost% 
  2. 使用する非公開鍵をエージェントデーモンに追加します。

    ssh-add コマンドがエージェントデーモンに非公開鍵を追加します。このため、後続の Secure Shell の操作では、パスフレーズを要求するプロンプトは表示されません。


    myLocalHost% ssh-add
    Enter passphrase for /home/johndoe/.ssh/id_rsa:
    Identity added: /home/johndoe/.ssh/id_rsa(/home/johndoe/.ssh/id_rsa)
    myLocalHost%
  3. Solaris Secure Shell セッションを起動します。


    myLocalHost% ssh myRemoteHost
    

例 — ssh-add オプションを使用する

ssh-add を使用して、別の鍵をデーモンに追加することもできます。たとえば、DSA v2、RSA v2、および RSA v1 の鍵を同時に使用したい場合があります。デーモンに格納されているすべての鍵を表示するには、-l オプションを使用します。デーモンから 1 つの鍵を削除するには、-d オプションを使用します。すべての鍵を削除するには、-D オプションを使用します。


myLocalHost% eval `ssh-agent`
Agent pid 3347
myLocalHost% ssh-add
Enter passphrase for /home/johndoe/.ssh/id_rsa:
Identity added: /home/johndoe/.ssh/id_rsa(/home/johndoe/.ssh/id_rsa)
myLocalHost% ssh-add /home/johndoe/.ssh/id_dsa
Enter passphrase for /home/johndoe/.ssh/id_dsa: <パスフレーズを入力>
Identity added:
/home/johndoe/.ssh/id_dsa(/home/johndoe/.ssh/id_dsa)
myLocalHost% ssh-add -l
md5 1024 0e:fb:3d:53:71:77:bf:57:b8:eb:f7:a7:aa:df:e0:d1
/home/johndoe/.ssh/id_rsa(RSA)
md5 1024 c1:d3:21:5e:40:60:c5:73:d8:87:09:3a:fa:5f:32:53
/home/johndoe/.ssh/id_dsa(DSA)
myLocalHost% ssh-add -d
Identity removed:
/home/johndoe/.ssh/id_rsa(/home/johndoe/.ssh/id_rsa.pub)
/home/johndoe/.ssh/id_dsa(DSA)

ssh-agent コマンドが自動的に動作するように設定する方法

Secure Shell を使用するときにパスフレーズとパスワードを入力しないようにするには、エージェントデーモン ssh-agent を起動します。このエージェントデーモンは、.dtprofile スクリプトから起動できます。

  1. エージェントデーモンを自動的に起動するには、$HOME/.dtprofile スクリプトの最後に次の行を追加します。


    if [ "$SSH_AUTH_SOCK" = "" -a -x /usr/bin/ssh-agent ]; then
                    eval `/usr/bin/ssh-agent`
    fi
  2. CDE セッションを終了するときに Secure Shell エージェントデーモンを終了するには、$HOME/.dt/sessions/sessionexit スクリプトに次の行を追加します。


    if [ "$SSH_AGENT_PID" != "" -a -x /usr/bin/ssh-agent ]; then
                    /usr/bin/ssh-agent -k
    fi

    このエントリにより、CDE セッションが終了したあとで、Secure Shell エージェントは使用できなくなります。

  3. Solaris Secure Shell セッションを起動します。


    myLocalHost% ssh myRemoteHost
    

    パスフレーズのプロンプトは表示されません。

Solaris Secure Shell のポート転送を使用する方法

リモートホストに転送されるローカルポートを指定することができます。指定すると、ソケットはローカル側で、そのポートを待機します。このポートからリモートホストへの接続は、セキュリティ保護されたチャネルを介して行われます。たとえば、IMAP4 で電子メールを安全にリモート受信するためにポート 143 を指定します。また、リモート側のポートを指定することもできます。


注 –

Secure Shell ポート転送では TCP 接続を使用する必要があります。Secure Shell は UDP 接続をサポートしていません。


    ローカルポートを転送元として設定するには、2 つのポートを指定します。待機するローカルポートを指定し、転送先のリモートホストとポートを指定します。


    myLocalHost% ssh -L localPort:remoteHost:remotePort 
    

    リモートポートをセキュリティ保護された接続の受信元として設定するには、2 つのポートを指定します。待機するリモートポートを指定し、転送先のローカルホストとポートを指定します。


    myLocalHost% ssh -R remotePort:localHost:localPort 
    

例 — ローカルポート転送を使用してメールを受信する

次の例は、ローカルポート転送を使用して、リモートサーバーからのメールを安全に受信する方法を示しています。


myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost 

このコマンドは、myLocalHost のポート 9143myRemoteHost のポート 143 (IMAP v2 のサーバーポート) に接続を転送します。ユーザーがメールアプリケーションを起動するときは、ローカルポート番号を指定する必要があります。dtmail コマンドの使用例を 図 11–1 に示します。

この例と 例 — リモートポート転送を使用してファイアウォールの外部と通信するで使用されている localhost は、ユーザーのローカルホストを指定するキーワードです。localhost キーワードと myLocalHost を混同しないでください。myLocalHost 変数は、この章の例で使用するローカルホストを表す仮のホスト名です。

図 11–1 電子メールに使用するポート転送を指定する

「Mailer - Login」ダイアログボックス。「IMAP Server」フィールドには、サーバー名、「:」、続けてポート番号が入力されています。

例 — リモートポート転送を使用してファイアウォールの外部と通信する

この例では、エンタープライズ環境のユーザーが、外部ネットワーク上のホストから企業のファイアウォール内部のホストに接続を転送する方法を示しています。


myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost

このコマンドは、myOutsideHost 上のポート 9022 への接続をローカルホストのポート 22 (sshd サーバー) に転送します。


myOutsideHost% ssh -p 9022 localhost
myLocalHost%

このコマンドを使用すると、リモート転送接続が確立されたあとで、ssh コマンドを使用してリモートホストから安全に接続できます。

Solaris Secure Shell を使用してファイルをコピーする方法

scp コマンドを使用して、暗号化されたファイルをホスト間でコピーします。暗号化されたファイルは、ローカルホストとリモートホストとの間、または 2 つのリモートホスト間でコピーできます。scp コマンドは、rcp コマンドと同様に動作しますが、パスワードを要求するプロンプトを表示する点で異なります。詳細は、scp(1) のマニュアルページを参照してください。

  1. セキュリティ保護されたコピープログラムを起動します。

    ソースファイル、リモートコピー先のユーザー名、およびコピー先ディレクトリを指定します。


    myLocalHost% scp myfile.1 johndoe@myRemoteHost:~
    
  2. Solaris Secure Shell パスフレーズを要求するプロンプト表示で、パスフレーズを入力します。


    Enter passphrase for key '/home/johndoe/.ssh/id_rsa': 
    <Return キーを押す>
    myfile.1       25% |*******                      |    640 KB  0:20 ETA 
    myfile.1 

    パスフレーズを入力すると、進行状況インジケータが表示されます。上記の出力の 2 行目が進行状況インジケータです。進行状況インジケータには、次の項目が表示されます。

    • ファイル名

    • その時点で転送が完了しているファイルの割合 (%)

    • 転送が完了した割合 (%) に対応したアスタリスク (*)

    • 転送が完了したデータの量

    • ファイル全体が転送されるまでの推定時間 (ETA)。推定残り時間

sftp コマンドを使用したファイルのリモート転送

sftp コマンドの動作は、ftp と類似していますが、使用するサブコマンドセットが異なります。次の表に、代表的なサブコマンドを示します。

表 11–3 対話型 sftp のサブコマンド
 カテゴリ

サブコマンド 

説明 

移動 

cd path

リモートディレクトリを path に変更する

lcd path

ローカルディレクトリを path に変更する

所有権 

chgrp group file

file のグループを group (数値 GID) に変更する

chmod mode file

file のアクセス権を変更する

ファイルのコピー 

get remote_file [local-path ]

リモートファイルを取得し、それをローカルホストに格納する 

put local_file [remote_path ]

ローカルファイルをリモートホストに格納する 

rename old_filenew_file

ローカルファイルの名前を変更する 

ディレクトリのリスト表示 

ls [path]

リモートディレクトリの内容を一覧表示する 

ディレクトリの作成 

mkdir path

リモートディレクトリを作成する 

その他 

exitquit

sftp コマンドを終了する

ファイアウォール外部のホストにデフォルト接続を設定する方法

Solaris Secure Shell を使用して、ファイアウォール内部のホストからファイアウォール外部のホストに接続することができます。接続するには、構成ファイル内またはコマンド行オプションに ssh のプロキシコマンドを指定します。詳細は、例 — コマンド行からファイアウォール外部のホストに接続するを参照してください。

通常は、個人用構成ファイル $HOME/.ssh/config または管理構成ファイル/etc/ssh/ssh_config を使用して、ssh の対話操作をカスタマイズできます(ssh_config(4) のマニュアルページを参照)。プロキシコマンドには2 種類あり、 一方が HTTP 接続用、もう一方が SOCKS5 接続用です。

  1. 構成ファイルにプロキシコマンドとホストを指定します。

    次の構文を使用して、必要なプロキシコマンドとホストの数に応じて行を追加します。


    [Host outside_host]
    ProxyCommand proxy_command [-h proxy_server] \
    [-p proxy_port] outside_host|%h outside_port|%p

    次に、各引数について説明します。

    Host outside_host

    コマンド行でリモートホスト名を指定した場合、プロキシコマンド指定をインスタンスに限定する。outside_host でワイルドカードを使用した場合、一連のホストに対して指定が適用される

    proxy_command

    プロキシコマンドを指定する。次のいずれかを指定できる。

    • HTTP 接続の場合は、/usr/lib/ssh/ssh-http-proxy-connect

    • SOCKS5 接続の場合は、/usr/lib/ssh/ssh-socks5-proxy-connect

    -h proxy_server-p proxy_port

    これらのオプションは、プロキシサーバーとプロキシポートをそれぞれ指定する。これらのオプションは、HTTPPROXYHTTPPROXYPORTSOCKS5_PORTSOCKS5_SERVERhttp_proxy などの、プロキシサーバーとプロキシポートを指定するどのような環境変数よりも優先される。http_proxy 変数は URL を指定する。これらのオプションを指定しない場合、適切な環境変数を設定する必要がある。ssh-socks5-proxy-connect(1)ssh-http-proxy-connect(1) のマニュアルページを参照

    outside_host

    接続先のホストを指定する。%h を使うとコマンド行からホストを指定できる。

    outside_port

    接続先のポートを指定する。%p を使うとコマンド行からポートを指定できる。Host outside_host オプションを使わずに %h%p を指定した場合、ssh コマンドが呼び出されるたびに、引数に指定されたホストにプロキシコマンドが適用されます。

  2. 外部のホストを指定して、Solaris Secure Shell を実行します。

    たとえば、次のように入力します。


    myLocalHost% ssh myOutsideHost
    

    このコマンドは、個人用構成ファイル内で myOutsideHost のプロキシコマンド指定を検索します。指定が検出されない場合、このコマンドは、システム全体の構成ファイル ssh_config から検索します。プロキシコマンドが ssh に置き換わります。

例 — コマンド行からファイアウォール外部のホストに接続する

ssh コマンドの -o オプションには、ssh 構成ファイル内で使用できる任意の行を入力できます。ここでは、前述の例のプロキシコマンド指定を使用します。

  1. 構成ファイルにプロキシコマンドとホストを指定します。

  2. ssh コマンドを実行します。-o オプションにプロキシコマンドを指定してください。たとえば、次のように入力します。


    % ssh -o'Proxycommand=/usr/lib/ssh/ssh-http-proxy-connect \
    -h myProxyServer -p 8080 myOutsideHost 22' myOutsideHost
    

    このコマンドは、ssh を HTTP プロキシコマンドに置き換え、ポート 8080myProxyServer をプロキシサーバーとして使用し、 myOutsideHost のポート 22 に接続します。