ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 の管理: セキュリティーサービス Oracle Solaris 11.1 Information Library (日本語) |
パート II システム、ファイル、およびデバイスのセキュリティー
10. Oracle Solaris のセキュリティー属性 (参照)
ホストに基づく認証を Secure Shell に設定する方法
Secure Shell デフォルトのユーザーおよびホスト例外を作成する方法
sftp ファイルのための切り離されたディレクトリを作成する方法
Secure Shell で使用する公開鍵と非公開鍵のペアを生成する方法
Secure Shell の公開鍵のパスフレーズを変更する方法
Secure Shell を使用してリモートホストにログインする方法
Secure Shell でのパスワードのプロンプトを減らす方法
Secure Shell を使用して ZFS をリモートで管理する方法
22. Kerberos エラーメッセージとトラブルシューティング
Secure Shell によって、ローカルシェルとリモートシェルの間の安全なアクセスが可能になります。詳細は、ssh_config(4) および ssh(1) のマニュアルページを参照してください。
次のタスクマップでは、ユーザーが Secure Shell を使用する際の手順を示します。
|
使用するサイトがホストに基づく認証またはユーザーの公開鍵認証を実装しているときは、ユーザーは公開鍵と非公開鍵のペアを生成する必要があります。追加のオプションについては、ssh-keygen(1) のマニュアルページを参照してください。
始める前に
ホストに基づく認証が構成されているかどうかをシステム管理者に確認します。
myLocalHost% ssh-keygen -t rsa Generating public/private rsa key pair. …
-t はアルゴリズムの種類で、rsa、dsa、rsa1 のいずれかです。
デフォルトでは、RSA v2 の鍵を表すファイル名 id_rsa がカッコ内に表示されます。このファイルを選択するときは、Return キーを押します。代わりのファイル名を入力することもできます。
Enter file in which to save the key (/home/jdoe/.ssh/id_rsa):<Press Return>
文字列 .pub を非公開鍵のファイル名に追加すると、自動的に公開鍵のファイル名になります。
このパスフレーズは、非公開鍵を暗号化するときに使用されます。空文字列入力は極力避けてください。入力したパスフレーズは表示されません。
Enter passphrase (empty for no passphrase): <Type passphrase>
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
鍵ファイルへのパスが正しいことを確認します。
% ls ~/.ssh id_rsa id_rsa.pub
この時点で公開鍵と非公開鍵のペアが作成されました。
リモートホストにログインできるようになっています。詳細については、「Secure Shell を使用してリモートホストにログインする方法」を参照してください。
% cat /etc/ssh/ssh_host_dsa_key.pub | ssh RemoteHost \ 'cat >> ~./ssh/known_hosts && echo "Host key copied"'
Enter password: <Type password> Host key copied %
次のコマンドを入力します (ただし、バックスラッシュなしで 1 行に入力)。
myLocalHost% cat $HOME/.ssh/id_rsa.pub | ssh myRemoteHost \ 'cat >> .ssh/authorized_keys && echo "Key copied"'
ファイルがコピーされると「Key copied」というメッセージが表示されます。
Enter password: Type login password Key copied myLocalHost%
手順については、「Secure Shell でのパスワードのプロンプトを減らす方法」を参照してください。詳細は、ssh-agent(1) および ssh-add(1) のマニュアルページを参照してください。
次の手順で非公開鍵が変更されることはありません。この手順は、非公開鍵 (パスフレーズ) の認証メカニズムを変更するものです。詳細は、ssh-keygen(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 は、非公開鍵ファイルのパスフレーズの変更を要求します。
ssh コマンドを入力して、リモートホストとログインの名前を指定します。
myLocalHost% ssh myRemoteHost -l username
リモートホストの信頼性を尋ねるプロンプトが表示されます。
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)?
このプロンプトは、リモートホストに初めて接続する場合には正常なプロンプトです。
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
Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase>
jdoe@myRemoteHost's password: <Type password> Last login: Wed Sep 7 09:07:49 2011 from myLocalHost Oracle Corporation SunOS 5.11 September 2011 myRemoteHost%
ユーザーが送信するコマンドはすべて暗号化されます。ユーザーが受信する応答はすべて暗号化されます。
終了したら、exit を入力するか、通常の方法でシェルを終了します。
myRemoteHost% exit myRemoteHost% logout Connection to myRemoteHost closed myLocalHost%
例 15-2 Secure Shell でのリモート GUI の表示
この例では、jdoe は両方のシステム上の初期ユーザーであるため、Software Installation 権利プロファイルが割り当てられています。jdoe は、リモートシステム上でパッケージマネージャー GUI を使用したいと考えています。X11Forwarding キーワードのデフォルト値は引き続き yes であり、xauth パッケージはリモートシステム上にインストールされています。
% ssh -l jdoe -X myRemoteHost jdoe@myRemoteHost's password: <Type password> Last login: Wed Sep 7 09:07:49 2011 from myLocalHost Oracle Corporation SunOS 5.11 September 2011 myRemoteHost% packagemanager &
Secure Shell の使用に際してパスフレーズやパスワードを入力しない場合は、エージェントデーモンを使用できます。セッションを開始するときにデーモンを起動します。次に、エージェントデーモンを使用して非公開鍵を格納するために、ssh-add コマンドを使用します。ホストごとにアカウントが異なる場合は、セッションに必要な非公開鍵を追加します。
エージェントデーモンの起動は、次の手順で説明するように、必要に応じて手動で行うことができます。
myLocalHost% eval `ssh-agent` Agent pid 9892
myLocalHost% pgrep ssh-agent 9892
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%
myLocalHost% ssh myRemoteHost -l jdoe
パスフレーズを要求するプロンプトは表示されません。
例 15-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 Oracle 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)
デフォルトでは、root 役割は Secure Shell を使用してリモートログインできません。従来、root は、重要なタスク (ZFS プールデータのリモートシステム上のストレージへの送信など) に Secure Shell を使用してきました。この手順では、root 役割は、リモートの ZFS 管理者として行動できるユーザーを作成します。
始める前に
root 役割になる必要があります。詳細は、「割り当てられている管理権限を使用する方法」を参照してください。
たとえば、zfsroot ユーザーを作成し、パスワードを提供します。
source # useradd -c "Remote ZFS Administrator" -u 1201 -d /home/zfsroot zfsroot source # passwd zfsroot Enter password: Retype password: #
dest # useradd -c "Remote ZFS Administrator" -u 1201 -d /home/zfsroot zfsroot dest # passwd zfsroot ...
zfsroot ユーザーは、両方のシステム上で同様に定義されている必要があります。
この鍵のペアは、ソースシステム上で作成されます。次に、公開鍵が、宛先システム上の zfsroot ユーザーにコピーされます。
# ssh-keygen -t rsa -P "" -f ~/id_migrate Generating public/private rsa key pair. Your identification has been saved in /root/id_migrate. Your public key has been saved in /root/id_migrate.pub. The key fingerprint is: 3c:7f:40:ef:ec:63:95:b9:23:a2:72:d5:ea:d1:61:f0 root@source
# scp ~/id_migrate.pub zfsroot@dest: The authenticity of host 'dest (10.134.76.126)' can't be established. RSA key fingerprint is 44:37:ab:4e:b7:2f:2f:b8:5f:98:9d:e9:ed:6d:46:80. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'dest,10.134.76.126' (RSA) to the list of known hosts. Password: id_migrate.pub 100% |*****************************| 399 00:00
source # usermod -P +'ZFS File System Management' -S files zfsroot dest # usermod -P +'ZFS File System Management' -S files zfsroot
dest # profiles zfsroot zfsroot: ZFS File System Management Basic Solaris User All
root@dest # su - zfsroot Oracle Corporation SunOS 5.11 11.1 May 2012 zfsroot@dest $ mkdir -m 700 .ssh zfsroot@dest $ cat id_migrate.pub >> .ssh/authorized_keys
root@source# ssh -l zfsroot -i ~/id_migrate dest \ pfexec /usr/sbin/zfs snapshot zones@test root@source# ssh -l zfsroot -i ~/id_migrate dest \ pfexec /usr/sbin/zfs destroy zones@test
root@source# zfs snapshot -r rpool/zones@migrate-all root@source# zfs send -rc rpool/zones@migrate-all | \ ssh -l zfsroot -i ~/id_migrate dest pfexec /usr/sbin/zfs recv -F zones
root@dest# usermod -P -'ZFS File System Management' zfsroot root@dest# su - zfsroot zfsroot@dest# cp .ssh/authorized_keys .ssh/authorized_keys.bak zfsroot@dest# grep -v root@source .ssh/authorized_keys.bak> .ssh/authorized_keys
リモートホストに転送されるローカルポートを指定することができます。指定すると、ソケットはローカル側で、そのポートを待機します。このポートからリモートホストへの接続は、セキュアなチャネルを介して行われます。たとえば、ポート 143 を指定すれば、IMAP4 で電子メールをリモートで取得できます。また、リモート側のポートを指定することもできます。
始める前に
ポート転送を使用するために、管理者は、リモートの Secure Shell サーバーでのポート転送を有効にする必要があります。詳細については、「Secure Shell のポート転送を構成する方法」を参照してください。
リモートからの通信を待機するローカルポートを指定します。また、通信を転送するリモートホストとリモートポートを指定します。
myLocalHost% ssh -L localPort:remoteHost:remotePort
リモートからの通信を待機するリモートポートを指定します。また、通信を転送するローカルホストとローカルポートを指定します。
myLocalHost% ssh -R remotePort:localhost:localPort
例 15-4 ローカルポート転送を使用してメールを受信する
次の例は、ローカルポート転送を使用して、リモートサーバーからのメールを安全に受信する方法を示しています。
myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost
このコマンドは、myLocalHost のポート9143 からポート 143 に接続を転送します。ポート 143 は、myRemoteHost の IMAP v2 のサーバーポートです。ユーザーがメールアプリケーションを起動するときは、localhost:9143 にあるように、ユーザーは IMAP サーバーのローカルポート番号を指定します。
localhost を myLocalHost と混同しないでください。myLocalHost は仮のホスト名です。localhost はローカルシステムを表すキーワードです。
例 15-5 リモートポート転送を使用してファイアウォールの外部と通信する
この例では、エンタープライズ環境のユーザーが、外部ネットワーク上のホストから企業のファイアウォール内部のホストに接続を転送する方法を示しています。
myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost
このコマンドは、myOutsideHost 上のポート 9022 からローカルホスト上のポート 22 (sshd サーバー) に接続を転送します。
myOutsideHost% ssh -p 9022 localhost myLocalHost%
次の手順では、scp コマンドを使用して、暗号化されたファイルをホスト間でコピーする方法を示します。暗号化されたファイルは、ローカルホストとリモートホストとの間、または 2 つのリモートホスト間でコピーできます。scp コマンドは、認証を求めるプロンプトを表示します。詳細は、scp(1) のマニュアルページを参照してください。
セキュアなファイル転送プログラム sftp も使用できます。詳細は、sftp(1) のマニュアルページを参照してください。例については、例 15-6 を参照してください。
注 - 監査サービスでは、ft 監査クラスを通じて sftp トランザクションを監査できます。scp については、監査サービスで ssh セッションのアクセスおよび終了を監査できます。
ソースファイル、リモートコピー先のユーザー名、およびコピー先ディレクトリを指定します。
myLocalHost% scp myfile.1 jdoe@myRemoteHost:~
Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase> myfile.1 25% |******* | 640 KB 0:20 ETA myfile.1
パスフレーズを入力すると、進行状況インジケータが表示されます。上記の出力の 2 行目が進行状況インジケータです。進行状況インジケータには、次の項目が表示されます。
ファイル名
そのファイル全体に対する、転送が完了した量の割合 (%)
そのファイル全体に対する、転送が完了した量の割合を示すアスタリスク(*)
転送が完了したデータの量
ファイル全体が転送されるまでの推定時間 (ETA)。推定残り時間
例 15-6 sftp コマンドを使用するときにポートを指定する
この例では、ユーザーは sftp コマンドで特定のポートを使用しようとしています。ユーザーは -o オプションを使用してポートを指定します。
% sftp -o port=2222 guest@RemoteFileServer
Secure Shell を使用して、ファイアウォール内部のホストからファイアウォール外部のホストに接続することができます。接続するには、構成ファイル内またはコマンド行オプションに ssh のプロキシコマンドを指定します。コマンド行オプションについては、例 15-7 を参照してください。
通常は、構成ファイルを使用して、ssh の対話操作をカスタマイズします。
1 つの方法として、~/.ssh/config の個人用構成ファイルをカスタマイズします。
もう 1 つの方法として、管理構成ファイル /etc/ssh/ssh_config を使用します。
ファイルは、2 種類のプロキシコマンドでカスタマイズできます。一方が HTTP 接続用、もう一方が SOCKS5 接続用です。詳細は、ssh_config(4) のマニュアルページを参照してください。
次の構文を使用して、必要なプロキシコマンドとホストの数に応じて行を追加します。
[Host outside-host] ProxyCommand proxy-command [-h proxy-server] \ [-p proxy-port] outside-host|%h outside-port|%p
コマンド行でリモートホスト名を指定した場合、プロキシコマンド指定をインスタンスに限定します。outside-host でワイルドカードを使用した場合、一連のホストに対してプロキシコマンド指定が適用されます。
プロキシコマンドを指定します。
次のいずれかを指定できます。
HTTP 接続の場合は、/usr/lib/ssh/ssh-http-proxy-connect
SOCKS5 接続の場合は、/usr/lib/ssh/ssh-socks5-proxy-connect
これらのオプションは、プロキシサーバーとプロキシポートをそれぞれ指定します。これらのオプションは、HTTPPROXY、HTTPPROXYPORT、SOCKS5_PORT、SOCKS5_SERVER、http_proxy などの、プロキシサーバーとプロキシポートを指定するどのような環境変数もオーバーライドします。http_proxy 変数は URL を指定します。これらのオプションを指定しない場合、適切な環境変数を設定する必要があります。詳細は、ssh-socks5-proxy-connect(1) および ssh-http-proxy-connect(1) のマニュアルページを参照してください。
接続先のホストを指定します。%h 代入引数を使うとコマンド行からホストを指定できます。
接続先のポートを指定します。%p 代入引数を使うとコマンド行からポートを指定できます。Host outside-host オプションを使わずに %h と %p を指定した場合、ssh コマンドが呼び出されるたびに、引数に指定されたホストにプロキシコマンドが適用されます。
たとえば、次のように入力します。
myLocalHost% ssh myOutsideHost
このコマンドは、個人用構成ファイル内で myOutsideHost のプロキシコマンド指定を検索します。指定が検出されない場合、このコマンドは、システム全体の構成ファイル /etc/ssh/ssh_config から検索します。プロキシコマンドが ssh コマンドに置き換わります。
例 15-7 Secure Shell コマンド行からのファイアウォール外部のホストへの接続
「ファイアウォール外部のホストへのデフォルトの Secure Shell 接続を設定する方法」では、構成ファイル内でプロキシコマンドを指定する方法について説明しています。この例では、プロキシコマンドを ssh コマンド行で指定します。
% ssh -o'Proxycommand=/usr/lib/ssh/ssh-http-proxy-connect \ -h myProxyServer -p 8080 myOutsideHost 22' myOutsideHost
ssh コマンドの -o オプションには、プロキシコマンドを指定するコマンド行を入力できます。この例のコマンドは次のことを行います。
ssh を HTTP プロキシコマンドに置き換える
プロキシサーバーとして、ポート 8080 および myProxyServer を使用する
myOutsideHost のポート 22 に接続する