Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
14.3.5.2. ユーザーの認証用の SSH 証明書の作成
ユーザーの証明書に署名するには、
ssh-keygen -s ca_user_key -I user_name -Z user_name -V -start:+end id_rsa.pubの形式でコマンドを使用します。生成される証明書の名前は
id_rsa-cert.pub
です。
OpenSSH のデフォルト動作は、証明書で指定されたプリンシパルのいずれかがリモートユーザー名と一致する場合に、ユーザーがリモートユーザーとしてログインできることです。これは以下の方法で調整できます。
-Z
オプションを使用して、署名プロセス中にユーザーの名前をさらに証明書に追加します。-Z "name1[,name2,...]"
- ユーザーのシステムで、cert-authority ディレクティブを使用して
~/.ssh/authorized_keys
ファイルに CA の公開鍵を追加し、以下のようにプリンシパル名を一覧表示します。~]# vi ~/.ssh/authorized_keys # A CA key, accepted for any host in *.example.com @cert-authority principals="name1,name2" *.example.com ssh-rsa AAAAB5Wm.
- サーバーで、ユーザーまたはグローバルのいずれかで
AuthorizedPrincipalsFile
ファイルを作成し、ログインを許可されたユーザーのファイルに原則の名前を追加します。次に、/etc/ssh/sshd_config
ファイルで AuthorizedPrincipalsFile ディレクティブを使用してファイルを指定します。
手順14.5 ユーザー証明書の生成
ユーザーをリモートホストに対して認証するには、ユーザーが公開鍵を生成し、CA サーバーに渡して CA サーバーが署名してから、ホストへのログイン時に使用するユーザーにより保存し直す必要があります。
- クライアントシステムで、証明書を必要とするユーザーとしてログインします。利用可能なキーが以下のようにあるかどうかを確認します。
~]$ ls -l ~/.ssh/
適切な公開鍵が存在しない場合は、ディレクトリーがデフォルトのディレクトリーでなければ、それを生成してディレクトリーパーミッションを設定します。たとえば、以下のコマンドを入力します。~]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/user1/.ssh/id_rsa): Created directory '/home/user1/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user1/.ssh/id_rsa. Your public key has been saved in /home/user1/.ssh/id_rsa.pub. The key fingerprint is: b1:f8:26:a7:46:87:c3:60:54:a3:6d:85:0d:60:fe:ce user1@host1.example.com The key's randomart image is: +--[ RSA 2048]----+ | oo++. | | o.o.o. | | .o o . | | oo . o | | . oo.S | | o=.. | | .Eo+ | | .= | | .. | +-----------------+
デフォルトでは、ユーザーの鍵のディレクトリーパーミッションはdrwx------
で、または 8 進数の 0700 です。必要に応じて、パーミッションが正しいことを確認します。~]$ ls -la ~/.ssh total 16 drwx------. 2 user1 user1 4096 May 7 12:37 . drwx------. 3 user1 user1 4096 May 7 12:37 .. -rw-------. 1 user1 user1 1679 May 7 12:37 id_rsa -rw-r--r--. 1 user1 user1 421 May 7 12:37 id_rsa.pub
キー生成の例と、正しいディレクトリー権限の設定方法については、「キーベースの認証の使用」 を参照してください。 - 選択した公開鍵を署名するには、CA として指定されたサーバーにコピーする必要があります。そのためには、secure copy コマンドを使用することができます。
scp ~/.ssh/id_protocol.pub admin@ca_server.example.com:~/keys/
ここで protocol はファイル名の一部で、キーの生成に使用するプロトコル(rsa
など)、admin は CA サーバーのアカウントであり、/keys/ は署名するキーを受信するディレクトリーの設定です。選択した公開鍵を CA として指定されたサーバーにコピーします。以下に例を示します。~]$ scp ~/.ssh/id_rsa.pub admin@ca-server.example.com:~/keys/ admin@ca-server.example.com's password: id_rsa.pub 100% 421 0.4KB/s 00:00
手順14.3「ホスト署名キーの信頼」 の説明に従ってホスト署名キーを信頼するようにクライアントシステムを設定した場合は、リモートホストの信頼性についての警告は表示されません。 - CA サーバーで、ユーザーの公開鍵に署名します。たとえば、
root
で以下を実行します。~]# ssh-keygen -s ~/.ssh/ca_user_key -I user1 -Z user1 -V -1d:+54w /home/admin/keys/id_rsa.pub Enter passphrase: Signed user key /home/admin/keys/id_rsa-cert.pub: id "user1" serial 0 for host_name.example.com valid from 2015-05-21T16:43:17 to 2016-06-03T16:43:17
- 作成された証明書を、システムのユーザーの
~/.ssh/
ディレクトリーにコピーします。以下に例を示します。~]# scp /home/admin/keys/id_rsa-cert.pub user1@host_name.example.com:~/.ssh/ user1@host_name.example.com's password: id_rsa-cert.pub 100% 1498 1.5KB/s 00:00
- 標準のファイル名と場所を使用する場合は、SSH デーモンは
-cert.pub
で終わるユーザー証明書を検索し、見つかった場合は自動的に使用するため、追加の設定は必要ありません。SSH バージョン 2 キーのデフォルトの場所とファイル名は~/.ssh/id_dsa
、~/.ssh/id_ecdsa
および~/.ssh/id_rsa
の man ページで説明されています。これらの場所と命名規則を使用する場合は、
sshd
が証明書を提示できるように設定ファイルを編集する必要はありません。リモートシステムにログインする際に自動的に使用されます。この場合、ステップ 6 に進みます。デフォルト以外のディレクトリーまたはファイルの命名規則を使用する必要がある場合は、root
で、以下の行を/etc/ssh/ssh_config
または~/.ssh/config
ファイルに追加します。IdentityFile ~/path/key_file
これは秘密鍵名でなければならず、.pub や-cert
.pub
は使用しないことに注意してください。ファイルのパーミッションが正しいことを確認します。以下に例を示します。~]$ ls -la ~/.ssh/config -rw-rw-r--. 1 user1 user1 36 May 27 21:49 /home/user1/.ssh/config chmod 700 ~/.ssh/config ~]$ ls -la ~/.ssh/config -rwx------. 1 user1 user1 36 May 27 21:49 /home/user1/.ssh/config
これにより、CA ユーザーの証明書署名鍵を信頼するように設定されたリモートシステムにログインする際に、このシステムのユーザーがユーザー証明書で認証できるようになります。 - ユーザー証明書をテストするには、ユーザーのアカウントから SSH 経由でサーバーへのログインを試みます。指定した場合は、証明書のプリンシパルとしてリストされているユーザーとしてこれを実行する必要があります。パスワードの入力を求めるプロンプトはないはずです。必要な場合は SSH コマンドに
-v
オプションを追加して、ロギング情報を確認します。