No.16


【Linux】OpenSSHによる公開鍵認証設定方法

OpenSSHによる公開鍵証設定方法

 今や常識となったOpenSSHによる鍵認証。パスワード無しでアクセスするのはほぼ必須の技術なこともあり、数日に1回は設定を行っている気がする。

 いつもコマンドのオプションとかファイルの権限とか失念するのでメモ。

 下記はloginuserユーザーで設定を行う場合の例。パスフレーズはどうせ解除するので設定していない。


[root@localhost ~]# su - loginuser
-bash-4.1$ pwd
/home/loginuser
-bash-4.1$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/loginuser/.ssh/id_rsa):  <改行のみ
Created directory '/home/loginuser/.ssh'.  <改行のみ
Enter passphrase (empty for no passphrase):  <改行のみ
Enter same passphrase again:  <改行のみ
Your identification has been saved in /home/loginuser/.ssh/id_rsa.
Your public key has been saved in /home/loginuser/.ssh/id_rsa.pub.
The key fingerprint is:
ca:d8:c6:21:92:48:89:c6:0e:4d:3e:4f:2e:30:5a:b4 loginuser@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
...
+-----------------+
-bash-4.1$

 これで.sshディレクトリ以下に秘密鍵と公開鍵が作成された。

ファイル名 鍵の種類
id_rsa 秘密鍵 絶対秘密!
id_rsa.pub 公開鍵 公開してOK

 公開鍵は以下のような訳のわからない文字列。

ssh-rsa AAAAB34d5afdcd4c...../C4q+CzmkM+VgB/tZw== loginuser@localhost.localdomain

 公開鍵の最後に自分のシグネチャが入る。必要ならこれは-Cオプションで指定できる。

ssh-keygen -t rsa -C username@domainname.com

 秘密鍵はそのままにして、公開鍵だけSSH接続先サーバに設置する。まずはid_rsa.pubをローカルにコピーして、後は接続先サーバでの作業となる。


 接続先サーバの同じユーザーのホームに.sshディレクトリを作り、共通鍵id_rsa.pubを設置する。あわせて認証用のファイルauthorized_keysにその内容を追記する。

 大事なのはファイルとディレクトリのパーミッション。.sshは700、id_rsa.pubauthorized_keysは600にする。これを忘れるとやった気になってたりするので泥沼に嵌まる。

[root@localhost ~]# su - loginuser
-bash-4.1$ mkdir .ssh
-bash-4.1$ chmod 700 .ssh
-bash-4.1$ cd .ssh
-bash-4.1$ vi id_rsa.pub
-bash-4.1$ cat id_rsa.pub >> authorized_keys
-bash-4.1$ chmod 600 id_rsa.pub
-bash-4.1$ chmod 600 authorized_keys
-bash-4.1$

 あとは鍵認証できるように/etc/ssh/sshd_configを設定して終了。

/etc/ssh/sshd_config

#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
↓
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

 設定後はsshサーバの再起動も忘れずに。

service sshd restart

おまけ

apacheユーザーなどログイン不可のアカウントでssh認証したい場合

 バッチ処理などで、apacheユーザーなどログイン不可のアカウントでsshを実行するケースがある。

 その場合は/etc/passwdの該当アカウント行を下記のように変更すれば良い。

apache:x:48:48:Apache:/var/www:/sbin/nologin
↓
apache:x:48:48:Apache:/home/apache:/bin/bash

 ホームディレクトリは/var/www/のままでも良いのでそこはお好みで。権限的によろしくない気がするので自分は変更することにしている。

[root@localhost ~]# passwd apache
[root@localhost ~]# mkdir /home/apache/
[root@localhost ~]# chown apache.apache /home/apache/
[root@localhost ~]# su - apache
-bash-4.1$ pwd
/home/apache