14.3.5.2. ユーザーの認証用の SSH 証明書の作成
ユーザーの証明書に署名するには、
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
の形式でコマンドを使用します。生成される証明書の名前は
ssh-keygen -s ca_user_key -I user_name -Z user_name -V -start:+end id_rsa.pub
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,...]"
-Z "name1[,name2,...]"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ユーザーのシステムで、cert-authority ディレクティブを使用して
~/.ssh/authorized_keys
ファイルに CA の公開鍵を追加し、以下のようにプリンシパル名を一覧表示します。vi ~/.ssh/authorized_keys
~]# vi ~/.ssh/authorized_keys # A CA key, accepted for any host in *.example.com @cert-authority principals="name1,name2" *.example.com ssh-rsa AAAAB5Wm.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - サーバーで、ユーザーまたはグローバルのいずれかで
AuthorizedPrincipalsFile
ファイルを作成し、ログインを許可されたユーザーのファイルに原則の名前を追加します。次に、/etc/ssh/sshd_config
ファイルで AuthorizedPrincipalsFile ディレクティブを使用してファイルを指定します。
手順14.5 ユーザー証明書の生成
ユーザーをリモートホストに対して認証するには、ユーザーが公開鍵を生成し、CA サーバーに渡して CA サーバーが署名してから、ホストへのログイン時に使用するユーザーにより保存し直す必要があります。
- クライアントシステムで、証明書を必要とするユーザーとしてログインします。利用可能なキーが以下のようにあるかどうかを確認します。適切な公開鍵が存在しない場合は、ディレクトリーがデフォルトのディレクトリーでなければ、それを生成してディレクトリーパーミッションを設定します。たとえば、以下のコマンドを入力します。
ls -l ~/.ssh/
~]$ ls -l ~/.ssh/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、ユーザーの鍵のディレクトリーパーミッションはCopy to Clipboard Copied! Toggle word wrap Toggle overflow drwx------
で、または 8 進数の 0700 です。必要に応じて、パーミッションが正しいことを確認します。キー生成の例と、正しいディレクトリー権限の設定方法については、 「キーベースの認証の使用」 を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 選択した公開鍵を署名するには、CA として指定されたサーバーにコピーする必要があります。そのためには、secure copy コマンドを使用することができます。ここで protocol はファイル名の一部で、キーの生成に使用するプロトコル(
scp ~/.ssh/id_protocol.pub admin@ca_server.example.com:~/keys/
scp ~/.ssh/id_protocol.pub admin@ca_server.example.com:~/keys/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rsa
など)、admin は CA サーバーのアカウントであり、/keys/ は署名するキーを受信するディレクトリーの設定です。選択した公開鍵を CA として指定されたサーバーにコピーします。以下に例を示します。手順14.3「ホスト署名キーの信頼」 の説明に従ってホスト署名キーを信頼するようにクライアントシステムを設定した場合は、リモートホストの信頼性についての警告は表示されません。scp ~/.ssh/id_rsa.pub admin@ca-server.example.com:~/keys/
~]$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - CA サーバーで、ユーザーの公開鍵に署名します。たとえば、
root
で以下を実行します。ssh-keygen -s ~/.ssh/ca_user_key -I user1 -Z user1 -V -1d:+54w /home/admin/keys/id_rsa.pub
~]# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 作成された証明書を、システムのユーザーの
~/.ssh/
ディレクトリーにコピーします。以下に例を示します。scp /home/admin/keys/id_rsa-cert.pub user1@host_name.example.com:~/.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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 標準のファイル名と場所を使用する場合は、SSH デーモンは
-cert.pub
で終わるユーザー証明書を検索し、見つかった場合は自動的に使用するため、追加の設定は必要ありません。SSH バージョン 2 キーのデフォルトの場所とファイル名は~/.ssh/id_dsa
、~/.ssh/id_ecdsa
および~/.ssh/id_rsa
の man ページで説明されています。これらの場所と命名規則を使用する場合は、
sshd
が証明書を提示できるように設定ファイルを編集する必要はありません。リモートシステムにログインする際に自動的に使用されます。この場合、ステップ 6 に進みます。デフォルト以外のディレクトリーまたはファイルの命名規則を使用する必要がある場合は、root
で、以下の行を/etc/ssh/ssh_config
または~/.ssh/config
ファイルに追加します。これは秘密鍵名でなければならず、.pub やIdentityFile ~/path/key_file
IdentityFile ~/path/key_file
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -cert
.pub
は使用しないことに注意してください。ファイルのパーミッションが正しいことを確認します。以下に例を示します。これにより、CA ユーザーの証明書署名鍵を信頼するように設定されたリモートシステムにログインする際に、このシステムのユーザーがユーザー証明書で認証できるようになります。ls -la ~/.ssh/config ls -la ~/.ssh/config
~]$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ユーザー証明書をテストするには、ユーザーのアカウントから SSH 経由でサーバーへのログインを試みます。指定した場合は、証明書のプリンシパルとしてリストされているユーザーとしてこれを実行する必要があります。パスワードの入力を求めるプロンプトはないはずです。必要な場合は SSH コマンドに
-v
オプションを追加して、ロギング情報を確認します。