公開鍵を登録して、SSHにパスワードレスでログインする方法を書いていく。ついでに、 その際に使う.ssh/authorized_keyファイルのオプションについても簡単にまとめておく。

┌─────────────┐           ┌─────────────┐
│ 192.168.1.1 │           │ 192.168.1.2 │
│             │    ssh    │             │
│  host_A     ├──────────►│  host_B     │
│ (client)    │ w/o passwd│ (server)    │
└─────────────┘           └─────────────┘

    ssh_id                   ssh_id.pub
 [private key]              [public key]

クライアントホスト上で鍵を生成する

秘密鍵と公開鍵のペアを生成する

### host_A上
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

デフォルトでは.ssh/配下に秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が生成される。

### host_A上
$ ls -l  .ssh/
total 20
-rw------- 1 ubuntu ubuntu 2602 Dec 31 12:39 id_rsa
-rw-r--r-- 1 ubuntu ubuntu  571 Dec 31 12:39 id_rsa.pub

$ cat .ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC+apmAHWgN7kzUeR14NidyTY+cdrnvfzciUam9vKZxRI9f1FzF6AGKTQ+6Ol7EM2v+V9DC1/BtdgjjnM91nfSz7mD0cKpnyfXHEWMGRwcQPGWmbKh90XyhjHnFqdI4rRBvj+rL+JiLbvda53gtdkmRgCs5bDXUU/QefNA/kQkc2UGBwaABkmymq6XGBN/Y5SAo6Hjc5twIYTCE++v3HAlNgclGmdOubKJpdMDc+pOxKwcsXSmwb1V+MW3qPecusZ0NNWF+1esfmFd1UDBwkkWs6seCeg5WrbzpKbX3Uz043l1285goAAUsvPt36eu0Dj6WIz/gjGyww/C7PBpkK3L9LzaZVUhceC4fy8VeCDToRxs5FpXY5CROlUNIDM1Kvwy+bSLtdCwId/Y7RVqfMWcwO7yutL1wtiM+/uy5WYkG56Z3HQrKTJR4jzeqh+dC5vDw/RUxFAe22Cp/j2WIuUj1BosxmfGjhRNqnnU6QK3/vrZ6puEz2bQSQMbE9z2LATk= ubuntu@admin-test

秘密鍵は、permissionが400(オーナーだけがRead only)でないとエラーになる。

公開鍵をリモートホスト上に登録する

続いて、上記で発行した公開鍵をリモートホスト上の.ssh/authorized_keysに追記する。

### host_B上

$ vim .ssh/authorized_key

(最後尾に上記の公開鍵のテキストをコピーする)

authorized_keysファイルには以下のフォーマットになっている。 (スペース区切り)

options keytype base64-encoded-key comment

optionsはその名の通り、オプションなので省略可能である。たいていの場合はオプションなしでauthorized_keysに書き込まれていることが多いが、IPアクセス制限などを書くこともできる。詳細は、ドキュメント(man5 authorized_keys)を参照。

アクセスの確認

### host_A上からログインを確認

$ ssh [email protected]

設定が問題なければ、秘密鍵(.ssh/id_rsa)を使って(パスワードなしで)ログインできる。

参照