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

Solaris Secure Shell の使用

Solaris Secure Shell によって、ローカルシェルと遠隔シェルの間の安全なアクセスが可能になります。詳細は、ssh_config(4) および ssh(1) のマニュアルページを参照してください。

ProcedureSolaris Secure Shell で使用する公開鍵と非公開鍵のペアを生成する方法

使用するサイトがホストに基づく認証またはユーザーの公開鍵認証を実装しているときは、ユーザーは公開鍵と非公開鍵のペアを生成する必要があります。追加のオプションについては、ssh-keygen(1) のマニュアルページを参照してください。

始める前に

ホストに基づく認証が構成されているかどうかをシステム管理者に確認します。

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


    myLocalHost% ssh-keygen -t rsa
    Generating public/private rsa key pair.
    …

    -t はアルゴリズムの種類で、rsadsarsa1 のいずれかです。

  2. 鍵が格納されるファイルのパスを指定します。

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


    Enter file in which to save the key (/home/jdoe/.ssh/id_rsa):<Press Return>
    

    文字列 .pub を非公開鍵のファイル名に追加すると、自動的に公開鍵のファイル名になります。

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

    このパスフレーズは、非公開鍵を暗号化するときに使用されます。空文字列入力は極力避けてください。入力したパスフレーズは表示されません。


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


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

    鍵ファイルへのパスが正しいことを確認します。


    % ls ~/.ssh
    id_rsa
    id_rsa.pub

    この時点で公開鍵と非公開鍵のペアが作成されました。

  6. 適切なオプションを選択します。

    • 管理者がホストに基づく認証を構成しているときは、ローカルホストの公開鍵を遠隔ホストにコピーする必要がある場合があります。

      遠隔ホストにログインできるようになっています。詳細については、「Solaris Secure Shell を使用して遠隔ホストにログインする方法」を参照してください。

      1. 次のコマンドを入力します (ただし、バックスラッシュなしで 1 行に入力)。


        % cat /etc/ssh/ssh_host_dsa_key.pub | ssh RemoteHost \
        'cat >> ~./ssh/known_hosts && echo "Host key copied"'
        
      2. プロンプトが表示されたら、ログインパスワードを入力します。


        Enter password: <Type password>
        Host key copied
        %
    • 使用するサイトで公開鍵によるユーザー認証が使用されているときは、遠隔ホストの authorized_keys ファイルに反映します。

      1. 公開鍵を遠隔ホストにコピーします。

        次のコマンドを入力します (ただし、バックスラッシュなしで 1 行に入力)。


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

        ファイルがコピーされると「Key copied」というメッセージが表示されます。


        Enter password: Type login password
        Key copied
        myLocalHost%
  7. (省略可能) パスフレーズのプロンプトを減らします。

    手順については、「Solaris Secure Shell でのパスワードのプロンプトを減らす方法」を参照してください。詳細は、ssh-agent(1) および ssh-add(1) のマニュアルページを参照してください。


例 19–2 ユーザーに対して v1 RSA 鍵を確立する

次の例では、ユーザーが Solaris Secure Shell プロトコルの v1 を実行するホストと接続することができます。v1 ホストによって認証されるようにするために、ユーザーは、v1 鍵を作成後、公開鍵の部分を遠隔ホストにコピーします。


myLocalHost% ssh-keygen -t rsa1 -f /home/jdoe/.ssh/identity
Generating public/private rsa key pair.
…
Enter passphrase (empty for no passphrase): <Type passphrase>
Enter same passphrase again: <Type passphrase>
Your identification has been saved in /home/jdoe/.ssh/identity.
Your public key has been saved in /home/jdoe/.ssh/identity.pub.
The key fingerprint is:
…
myLocalHost% ls ~/.ssh
id_rsa
id_rsa.pub
identity
identity.pub
myLocalHost% cat $HOME/.ssh/identity.pub | ssh myRemoteHost \
'cat >> .ssh/authorized_keys && echo "Key copied"'

ProcedureSolaris Secure Shell の公開鍵のパスフレーズを変更する方法

次の手順で非公開鍵が変更されることはありません。この手順は、非公開鍵 (パスフレーズ) の認証メカニズムを変更するものです。詳細は、ssh-keygen(1) のマニュアルページを参照してください。

  1. パスフレーズを変更します。

    ssh-keygen コマンドを-p オプションを指定して入力し、プロンプトに答えます。


    myLocalHost% ssh-keygen -p
    Enter file which contains the private key (/home/jdoe/.ssh/id_rsa):<Press Return>
    Enter passphrase (empty for no passphrase): <Type passphrase>
    Enter same passphrase again:   <Type passphrase>
    

    -p は、非公開鍵ファイルのパスフレーズの変更を要求します。

ProcedureSolaris Secure Shell を使用して遠隔ホストにログインする方法

  1. Solaris Secure Shell セッションを開始します。

    ssh コマンドを入力して、遠隔ホストの名前を指定します。


    myLocalHost% ssh myRemoteHost
    

    遠隔ホストの信頼性を尋ねるプロンプトが表示されます。


    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)? 

    このプロンプトは、遠隔ホストに初めて接続する場合には正常なプロンプトです。

  2. プロンプトが表示されたら、遠隔ホスト鍵の信頼性を確認します。

    • 遠隔ホストの信頼性を確認できない場合は、no と入力してシステム管理者に連絡します。


      Are you sure you want to continue connecting(yes/no)? no
      

      システム管理者は、大域の /etc/ssh/ssh_known_hosts ファイルを更新する責任があります。更新された ssh_known_hosts ファイルでは、このようなプロンプトは表示されません。

    • 遠隔ホストの信頼性を確認したら、プロンプトに答えて次の手順に進みます。


      Are you sure you want to continue connecting(yes/no)? yes
      
  3. Solaris Secure Shell に対して自分を認証します。

    1. プロンプトが表示されたら、自分のパスフレーズを入力します。


      Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase>
      
    2. プロンプトが表示されたら、アカウントのパスワードを入力します。


      jdoe@myRemoteHost's password: <Type password>
      Last login: Fri Jul 20 14:24:10 2001 from myLocalHost
      myRemoteHost%
  4. 遠隔ホストでトランザクションを実行します。

    ユーザーが送信するコマンドはすべて暗号化されます。ユーザーが受信する応答はすべて暗号化されます。

  5. Solaris Secure Shell の接続を切断します。

    終了したら、exit を入力するか、通常の方法でシェルを終了します。


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

ProcedureSolaris Secure Shell でのパスワードのプロンプトを減らす方法

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

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

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


    myLocalHost% eval `ssh-agent`
    Agent pid 9892
  2. エージェントデーモンが起動していることを確認します。


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

    ssh-add コマンドを入力します。


    myLocalHost% ssh-add
    Enter passphrase for /home/jdoe/.ssh/id_rsa: <Type passphrase>
    Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa)
    myLocalHost%
  4. Solaris Secure Shell セッションを開始します。


    myLocalHost% ssh myRemoteHost
    

    パスフレーズを要求するプロンプトは表示されません。


例 19–3 ssh-add オプションを使用する

この例では、jdoe が 2 つの鍵をエージェントデーモンに追加します。-l オプションは、デーモンに格納されているすべての鍵を一覧表示するために使用します。セッションの最後に、-D オプションを使用して、エージェントデーモンからすべての鍵を削除します。


myLocalHost% ssh-agent
myLocalHost% ssh-add
Enter passphrase for /home/jdoe/.ssh/id_rsa: <Type passphrase>
Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa)
myLocalHost% ssh-add /home/jdoe/.ssh/id_dsa
Enter passphrase for /home/jdoe/.ssh/id_dsa: <Type passphrase>
Identity added:
/home/jdoe/.ssh/id_dsa(/home/jdoe/.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/jdoe/.ssh/id_rsa(RSA)
md5 1024 c1:d3:21:5e:40:60:c5:73:d8:87:09:3a:fa:5f:32:53
/home/jdoe/.ssh/id_dsa(DSA)

User conducts Solaris Secure Shell transactions

myLocalHost% ssh-add -D
Identity removed:
/home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa.pub)
/home/jdoe/.ssh/id_dsa(DSA)

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

CDE を使用する場合、Solaris Secure Shell を使用するときにパスフレーズとパスワードを入力しないようにするには、エージェントデーモン ssh-agent を自動的に起動します。このエージェントデーモンは、.dtprofile スクリプトから起動できます。パスフレーズとパスワードをエージェントデーモンに追加する方法については、例 19–3 を参照してください。


注意 – 注意 –

Sun Java Desktop System (Java DS) を使用する場合には、ssh-agent コマンドが自動的に実行されるように設定しないでください。ssh-agent プロセスの終了は CDE インタフェースによって制御されるため、Java DS を終了してもデーモンは動作し続けます。たとえば、CDE セッションでデーモンを起動し、Java DS セッションに移動してからログアウトした場合、デーモンは動作し続けます。

実行中のデーモンはシステムリソースを使用します。ssh-agent デーモンを実行したまま放置しても、何らかの既知の問題が発生するわけではありませんが、このデーモンにはパスワードが含まれているので、セキュリティーが脅かされる恐れがあります。


  1. ユーザーの起動スクリプトでエージェントデーモンを自動的に起動します。

    $HOME/.dtprofile スクリプトの最後に次の行を追加します。


    if [ "$SSH_AUTH_SOCK" = "" -a -x /usr/bin/ssh-agent ]; then
                    eval `/usr/bin/ssh-agent`
    fi
  2. CDE セッションを終了するときにエージェントデーモンを終了します。

    $HOME/.dt/sessions/sessionexit スクリプトに次の行を追加します。


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

    このエントリにより、CDE セッションが終了したあとで、Solaris Secure Shell エージェントは使用できなくなります。このスクリプトは CDE に固有のインタフェース sessionexit を使用しているため、Sun Java Desktop System セッションでこの手順を実行しても、エージェントデーモンは終了しません。

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

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

始める前に

ポート転送を使用するために、管理者は、遠隔の Solaris Secure Shell サーバーでのポート転送を有効にする必要があります。詳細については、「Solaris Secure Shell のポート転送を構成する方法」を参照してください。

  1. ポート転送を安全に使用するために、次のオプションのどちらかを選択してください。

    • ローカルポートを遠隔ポートからのセキュリティー保護された通信の受信側として設定するには、両方のポートを指定します。

      遠隔からの通信を待機するローカルポートを指定します。また、通信を転送する遠隔ホストと遠隔ポートを指定します。


      myLocalHost% ssh -L localPort:remoteHost:remotePort 
      
    • 遠隔ポートをローカルポートからのセキュリティー保護された接続の受信側として設定するには、両方のポートを指定します。

      遠隔からの通信を待機する遠隔ポートを指定します。また、通信を転送するローカルホストとローカルポートを指定します。


      myLocalHost% ssh -R remotePort:localhost:localPort
      

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

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


myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost 

このコマンドは、myLocalHost のポート9143 からポート 143 に接続を転送します。ポート 143 は、myRemoteHost の IMAP v2 のサーバーポートです。ユーザーがメールアプリケーションを起動するときは、次のダイアログボックスのように、ローカルポート番号を指定する必要があります。

ダイアログボックスのタイトルは「Mailer - Login」です。「IMAP Server」フィールドでは、サーバー名のあとにコロンとポート番号が続きます。

ダイアログボックスの localhostmyLocalHost と混同しないようにしてください。myLocalHost は仮のホスト名です。localhost はローカルシステムを表すキーワードです。



例 19–5 遠隔ポート転送を使用してファイアウォールの外部と通信する

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


myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost

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


myOutsideHost% ssh -p 9022 localhost
myLocalHost%

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

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

ftp コマンドより安全な sftp を使用することもできます。詳細は、sftp(1) のマニュアルページを参照してください。例については、例 19–6 を参照してください。

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

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


    myLocalHost% scp myfile.1 jdoe@myRemoteHost:~
    
  2. プロンプトが表示されたら、パスフレーズを入力します。


    Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase>
    myfile.1       25% |*******                      |    640 KB  0:20 ETA 
    myfile.1 

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

    • ファイル名

    • そのファイル全体に対する、転送が完了した量の割合 (%)

    • そのファイル全体に対する、転送が完了した量の割合を示すアスタリスク(*)

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

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


例 19–6 sftp コマンドを使用するときにポートを指定する

この例では、ユーザーは sftp コマンドで特定のポートを使用しようとしています。ユーザーは -o オプションを使用してポートを指定します。


% sftp -o port=2222 guest@RemoteFileServer

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

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

通常は、構成ファイルを使用して、ssh の対話操作をカスタマイズします。

ファイルは、2 種類のプロキシコマンドでカスタマイズできます。一方が HTTP 接続用、もう一方が SOCKS5 接続用です。詳細は、ssh_config(4) のマニュアルページを参照してください。

  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 のプロキシコマンド指定を検索します。指定が検出されない場合、このコマンドは、システム全体の構成ファイル /etc/ssh/ssh_config から検索します。プロキシコマンドが ssh コマンドに置き換わります。


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

「ファイアウォール外部のホストにデフォルト接続を設定する方法」では、構成ファイルでプロキシコマンドを指定する方法について説明しました。この例では、プロキシコマンドを ssh コマンド行で指定します。


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

ssh コマンドの -o オプションには、プロキシコマンドを指定するコマンド行を入力できます。この例のコマンドは次のことを行います。