ssh-keygenでSSH公開鍵認証のための秘密鍵と公開鍵のペアを作成する
ssh-keygenコマンドを使うと、SSH公開鍵認証ための秘密鍵と公開鍵のペアを作成することができます。
まず、SSHの秘密鍵を保存しておくディレクトリ「~/.ssh」に移動します。このディレクトリ中で、ssh-keygenコマンドで秘密鍵と公開鍵のペアを作成します。
cd ~/.ssh
もし「~/.ssh」ディレクトリが存在しないという場合は、mkdirコマンドで、作成します。不適切なパーミッションだとトラブルの元なので、パーミッション 700 を指定するのが推奨です。chmodコマンドで、パーミッションを設定しています。
mkdir -p ~/.ssh chmod 700 ~/.ssh
公開鍵と秘密鍵のペアを生成するには、ssh-keygenコマンドを実行します。
ssh-keygen -t rsa
生成するファイル名を聞かれますので「id_rsa_example」と入力しましょう。exampleの部分は、用途に応じて変えてください。
「id_rsa_example」と「id_rsa_example.pub」というファイルが作成されます。「id_rsa_example」は秘密鍵、「id_rsa_example.pub」は公開鍵です。
パスフレーズを入力してくださいと聞かれたときは、パスフレーズを入力する場合は、パスフレーズを、必要のない場合は、Enterを押してください。再入力を求められるので、同じパスフレーズを、入力してください。パスフレーズを設定していない場合は、Enterを押してください。
パスフレーズとは「鍵を保護する目的で秘密鍵ファイルに設定するもの」のことで、「ログイン用パスワードとは別」のものです。
秘密鍵
秘密鍵の内容
catコマンドで「id_rsa_example」の中身を表示してみましょう。
cat id_rsa_example
以下のように表示されます。
-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEA4CEvH2b3HvgxOqRMKYaTpvcHmmYVuPGxg3784eQPGu9UJgl9 tC/3xw7RJvK/pXm85Dee4vH1X8Z2W3tLrwvGZ+62imWADNvG33uiMGPOoO/d0RUp NgaO5ZnJTbe3T56BHRoI7+QOX5KICNq4RH6Qs3+1UFeAjlg0ASv0wauyCWuuR46/ U0wWUT126Th5iN2uTNeF0mM3Y0Mb4TVgnH0fQPvEKF9lZApWUe7lYFeCgfJ5drP2 yU7wv7g5jKiHjiiXS8wdn8SOB8n70JwM/IkbbyIqCKfGCR/hVxGZBxrAidn8uRzL Y2YkrZqvP62d6jvlJrgMjgA4yVr7viDYjwN7KwIDAQABAoIBAQCCNYUk3zLOQS6I fQ7qSQ7av0UhhBE2ouOYG1xa95127neaqYTn+74dXRRRZlHEltcQVuftvNfqzmfQ ee7cQSEBHIPcH1+nGL+O8kqlhjZy9SeO4pZQlrrJ1PBIQGU00kb8WzW5+GoJSB3T 1w2abVUvkxAJHuzGxaNg0uKc6VzDbz877+dPgJD4vnLvYsyy8IKyCR2KrDRdv+JT hR/2OlqlPuFLKWyA1xDHcIuv9ie8u0yaOQU0rnMJSEp7BCedsPUXV0RBgFgcT49O 61G7ufVDvQxEe3tFEWfpT1guFlMtYlveUPo3gsJDQZo/zfZofcqyHC/gE8I1KkMd c9kDOnvRAoGBAPAyljHDjG1KKgTyETggzO9RKxlYT0ALvd8xrDoFCWIavcfoA6Gl /RYOt2iihh6PXQO99Igvyffkikaar4FNGxnHE72VJbwQdChxYWnN/gUlphQr/nsJ fauALRWNxGueOJTaaz9vnGbTL8Ky5RLkzPjf/hp9ujr/sllyGatFJz8NAoGBAO7f +ulN6Rot9OGUrdnV7F99HtMOSNkjnIcRW0V4rp6c4Q89LhXx9kWVmcR3jkoYdV16 ouZ5AXUc43OTPosydVOdMTeSo0YfCNPu/fU7PWTqpp6qn/ZKAdeiiHgIspYkix1k o2xY7v4h0yU8MOvMwDEPle7qQoGssI17b/vLY9UXAoGASG3YoHTo+WOtvAQKcTRi 159QMbpRW2yu+oiN+IjgRXbu10L9JVdaM7aIU8L+UmTElYZIIHDYpCmEELpARess St+e8kHxOP51KGTYDQGSoZayt850VEGOZZKnBaLUIed6BFjAkkZjkRYJhtpO/R2F OV7Bztcuuu+zpgkj+GNH7FkCgYAzp8O+h9aMjruRvHEL1jLTQ19TDJe8PPMwUhSG pV49dndEsFoy7KvwyDUEQ0ZFx5w5prdrV2d1R9X3vDOeLj8o4aku90rPcw6ZpejN Cw5vsD5vuT32KHLVipQwQNE9npFmvciJOYIU+oOKXcXGd/Rnp5MoowfWut1C+xpw PL9N6QKBgAzbxGL41apbLHuZ+duuz5D8Kbolhcke61+MSXNjvJIvOJruDt6F8TZY mJ4gSaRUf9C9315+kRg0UmZafRNW6rVYcxbU9sDVLMPWS1LYd3JXx03Ac5sHK7Ks BxFxFujQ1PG44DZBGRWoUGht+Bu/ZBtf9faiS8yR6U5p9AKARGE2 -----END RSA PRIVATE KEY-----
秘密鍵のパーミッションは600
秘密鍵のパーミッションは600である必要があります。ssh-keygenを使って作成した場合は、パーミッションは600に設定されますが、他のサーバーから秘密鍵の内容をコピーしてきた場合は、chmodコマンドを使って、パーミッションを600にしましょう。
chmod 600 id_rsa_example
sshコマンドのデフォルトで利用される秘密鍵はid_rsa
デフォルトで利用される秘密鍵はid_rsaです。このことを知らないと、秘密鍵をつかってSSH公開鍵認証を行う場合に、とまどいます。秘密鍵ファイルを指定する方法や、特定のドメインへの秘密鍵ファイルのパスを設定ファイルに指定する方法は、sshコマンドの記事を参考にしてください。
SSHクライアントは、秘密鍵と公開鍵のペアを使って、SSHサーバーに接続します。公開鍵がない場合は、秘密鍵から公開鍵を生成してくれます。
公開鍵
公開鍵の内容
catコマンドで「id_rsa_example.pub」の中身を表示してみましょう。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjSsucYA958wTIKUcPRXC2iZxb84FXkzm41/jzpfnUeBFsypS8xfTXpfDaSIYeMDyr9pIUfDuWWPykoofL4WZaJYDy5pQclFwby/KttDRAnm0XZQ2ZDUtnrUUdva55mxOcTJP0c1VWXpwrhBA+JSFLOGB8wxCV8UFh9XWXI4c5QKQ/Hyl8//nXT6suQf199VNf4Ru31rs+49FDW9FyvoX1GGEEBJCT2ROVD6qi1xY766PuhM/4OMQeIxZmZg8ysML307viqkKh/2mecwkdV1mxGQt8GbO3gvTOX5h9p7tGEwa3zSHhxudux1Kf6Pfcg4FwKuld8r77DKMXEszpRI11 myapp@myhost
リモートサーバーに登録する公開鍵はの内容がこれです。
サーバー側における公開鍵の登録
クライアント側で生成された公開鍵を、サーバー側で設定するには「~/.ssh/authorized_keys」に登録します。ssh-keygenで作成した公開鍵ファイルをそのまま設置するわけではないので、注意してください。viコマンドで「~/.ssh/authorized_keys」を開いて、公開鍵を登録します。
vi ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjSsucYA958wTIKUcPRXC2iZxb84FXkzm41/jzpfnUeBFsypS8xfTXpfDaSIYeMDyr9pIUfDuWWPykoofL4WZaJYDy5pQclFwby/KttDRAnm0XZQ2ZDUtnrUUdva55mxOcTJP0c1VWXpwrhBA+JSFLOGB8wxCV8UFh9XWXI4c5QKQ/Hyl8//nXT6suQf199VNf4Ru31rs+49FDW9FyvoX1GGEEBJCT2ROVD6qi1xY766PuhM/4OMQeIxZmZg8ysML307viqkKh/2mecwkdV1mxGQt8GbO3gvTOX5h9p7tGEwa3zSHhxudux1Kf6Pfcg4FwKuld8r77DKMXEszpRI11 myapp@myhost
「authorized_keys」は公開鍵を複数登録でき、公開鍵ごとの設定を行うこともできます。
複数登録する場合は、行を変えて記述してください。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjSsucYA958wTIKUcPRXC2iZxb84FXkzm41/jzpfnUeBFsypS8xfTXpfDaSIYeMDyr9pIUfDuWWPykoofL4WZaJYDy5pQclFwby/KttDRAnm0XZQ2ZDUtnrUUdva55mxOcTJP0c1VWXpwrhBA+JSFLOGB8wxCV8UFh9XWXI4c5QKQ/Hyl8//nXT6suQf199VNf4Ru31rs+49FDW9FyvoX1GGEEBJCT2ROVD6qi1xY766PuhM/4OMQeIxZmZg8ysML307viqkKh/2mecwkdV1mxGQt8GbO3gvTOX5h9p7tGEwa3zSHhxudux1Kf6Pfcg4FwKuld8r77DKMXEszpRI11 myapp@myhost ssh-rsa CCCAB3NzaC1yc2EAAAADAQAnAABAQCjSsucYA958wTIKUcPRXC2iZxb84FXkzm41/jzpfnUeBFsypS8xfTXpfDaSIYeMDyr9pIUfDuWWPykoofL4WZaJYDy5pQclFwby/KttDRAnm0XZQ2ZDUtnrUUdva55mxOcTJP0c1VWXpwrhBA+JSFLOGB8wxCV8UFh9XWXI4c5QKQ/Hyl8//nXT6suQf199VNf4Ru31rs+49FDW9FyvoX1GGEEBJCT2ROVD6qi1xY766PuhM/4OMQeIxZmZg8ysML307viqkKh/2mecwkdV1mxGQt8GbO3gvTOX5h9p7tGEwa3zSHhxudux1Kf6Pfcg4FwKuld8r77DKMXEszpRI11 myapp2@myhost
パーミッションは600にしましょう。こちらは、必須ではないですが、600にすることが推奨されています。
chmod 600 ~/.ssh/authorized_keys
SSH公開鍵認証を使う例
rsyncによるバックアップの自動化
rsyncによるバックアップの自動化を行う場合に、パスワードの入力を求められると自動化できないので、SSH公開鍵認証を使ってSSHのユーザー認証を行います。
ユーザーログイン
SSHのログインにユーザーのパスワードではなく、SSHの鍵認証を行いたい場合。
Github
Github上で、SSHを使って、Gitリポジトリを取得・更新するときは、Githubに公開鍵を登録必要する必要があります。