Ubuntuサーバー構築入門

  • Ubuntu 20
  • Ubuntu 18
  • Ubuntu 16

ssh-keygenでSSH公開鍵認証のための秘密鍵と公開鍵のペアを作成する

ssh-keygenコマンドを使うと、SSH公開鍵認証ための秘密鍵と公開鍵のペアを作成することができます。

まず、SSHの秘密鍵を保存しておくディレクトリに移動します。このディレクトリ中で、ssh-keygenコマンドで秘密鍵と公開鍵のペアを作成します。

これは、ssh-keygenコマンドにとっては、本来は必要な作業ではないのですが、公開鍵をリモートサーバーに配布する場合に、秘密鍵の方を「~/.ssh」の中に残しておくので、このことを想定した手順になっています。

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コマンドの記事を参考にしてください。

公開鍵

公開鍵の内容

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

公開鍵は、複数登録することができます。その場合は、行を変えて記述してください。

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

この手順は、自身がサーバーとして接続される場合のものです。自身がリモートサーバーに接続する場合には、公開鍵を渡して、登録してもらえばOKです。

SSH公開鍵認証を使う例

rsyncによるバックアップの自動化

rsyncによるバックアップの自動化を行う場合に、パスワードの入力を求められると自動化できないので、SSH公開鍵認証を使ってSSHのユーザー認証を行います。

ユーザーログイン

SSHのログインにユーザーのパスワードではなく、SSHの鍵認証を行いたい場合。

Github

Github上で、SSHを使って、Gitリポジトリを取得・更新するときは、Githubに公開鍵を登録必要する必要があります。