トップページに戻る


ssh接続を鍵認証で行う
最終更新日:2016.08.14

注意: あらかじめ初期設定は終わっていることを前提としています。
root権限でリモートログイン出来ないように設定しておいてください。


デフォルトではssh接続は公開鍵認証ではなく、パスワード認証されるよう設定されています。
この状態では、

この条件が揃っていれば、誰でもサーバーにアクセス出来て危険です。
これを鍵認証のみssh接続を許可するように設定変更しましょう。

クライアントでキーペアを作成

(1) まず、クライアントでキーペア(秘密鍵と公開鍵)を作ります。本例では、client_rsaというRSA鍵を作成。
$ cd ~/.ssh
$ ssh-keygen -f client_rsa -t rsa -b 2048
Enter passphrase: パスワードを設定する場合は入力してEnter。不要ならEnter。
Enter some passphrase again: もう一度同じように入力。

[Tips]ssh-keygen

(2)ユーザーフォルダ配下に .ssh フォルダが作成され、以下のような鍵が作成されます。
$ ls ~/.ssh
client_rsa   client_rsa.pub

クライアントにキーペアを登録

作成した鍵はsshコマンド実行時に-iオプションを使って認証時に使うことができますが、
ssh-addコマンドを使って鍵を登録しておくと-iオプションを省略できます。用途ごとにキーペアを使い分けている場合、このように設定しておくと便利です。

Linuxの場合

キーペアを登録するには次のように実行します。あとはSSH Agentがよしなにやってくれます。
$ eval `ssh-agent`		←SSH Agentの起動
$ ssh-add ~/.ssh/client_rsa	←鍵の登録
$ ssh-add -l	←鍵が登録されたことを確認
2048 xx:xx:xx... /home/vagrant/.ssh/client_rsa (RSA)
~/.bashrcに以下の記述を追記します。
$ vi ~/.bashrc
...
eval `ssh-agent`&&ssh-add ~/.ssh/client_rsa	←記述する行

$ source ~/.bashrc		←sourceコマンドで設定を読み込み
Agent pid xxxx
Identity added: /home/user/.ssh/client_rsa (/home/user/.ssh/client_rsa)

Macの場合

なお、Macクライアントの場合はSSH Agentの起動は必要ありません。
ssh-addコマンドに-Kオプションを実行することでキーチェーンに登録できます)。

$ ssh-add -K ~/.ssh/client_rsa ←鍵の登録

鍵をサーバーに登録(ssh-copy-idコマンドを使った方法)

(3)ssh-copy-idコマンドでリモートサーバーに鍵を登録します。
$ ssh-copy-id -i ~/.ssh/client_rsa.pub admin@192.168.1.100
Are you sure you want to continue connecting (yes/no)? yes
admin@192.168.1.100's password:	←パスワード認証する(初回のみ)
	Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'admin@192.168.1.100'"
and check to make sure that only the key(s) you wanted were added
ただし、この方法を行うには、リモートサーバーに初回のみパスワードで認証する必要があります。コマンドを実行した際に「Permission denied (publickey,gssapi-keyex,gssapi-with-mic).」というエラーが出た場合は、リモートサーバーのSSH_configを確認してください。
remote# vi /etc/ssh/sshd_config
...
PasswordAuthentication yes	←yesになっていなかったら変更
...
remote# systemctl restart sshd
鍵の登録後はPasswordAuthenticationをnoに元に戻して構いません。sshdも再起動してください。手順(7)に進みます。

鍵をサーバーに登録(鍵を手動コピーする方法)

ssh-copy-idコマンドを使わずに鍵を登録する方法です。この方法はSELinuxが有効だとうまくいかない場合があります。

(3)scpコマンドでclient_rsa.pubを送ります。
$ scp ~/.ssh/client_rsa.pub admin@192.168.1.100:~
admin@192.168.1.100 ‘s password:(パスワードを入力)
client_rsa.pub      100%   16   0.0 KB/s   00:00
(4)sshコマンドでサーバーに入ります。
$ ssh admin@192.168.1.100
admin@192.168.1.100 ‘s password:(パスワードを入力)
Last login: Sat May 22 14:26:25 2010 from 192.168.1.55
remote$
(5)公開鍵をリモートサーバーに登録します。
.sshディレクトリがあるか確認します。
remote$ ls -aF
./   .bash_history  .bash_profile  .mozilla/  .viminfo
../  .bash_logout   .bashrc        .ssh/      .zshrc

~/.sshディレクトリがある場合

remote$ mv ~/client_rsa.pub ~/.ssh
remote$ cat ~/.ssh/client_rsa.pub >> authorized_keys
remote$ chmod 600 authorized_keys
authorized_keysというファイルに公開鍵を書き込みます。

~/.sshディレクトリが無い場合

以下のようにして、ディレクトリを作って作業を行なってください。
remote$ cd ~
remote$ mkdir .ssh
remote$ chmod 700 .ssh
remote$ mv ~/client_rsa.pub ~/.ssh
remote$ cat ~/.ssh/client_rsa.pub >> authorized_keys
remote$ chmod 600 authorized_keys
authorized_keysというファイルに公開鍵を書き込みます。
(6)サーバーにコピーした鍵は削除します。
remote$ rm ~/.ssh/client_rsa.pub

SSH接続の確認

(7)いったんログアウトしてログインしてみましょう。
remote$ exit
Connection to centos closed.

$ ssh -i ~/.ssh/client_rsa admin@192.168.1.100
Last login: Sat May 22 14:27:00 2010 from 192.168.1.55
remote$
設定を間違っていなければ、パスワード無しで認証出来るようになったはずです。

SSH接続のパスワード認証を無効化

(8)パスワード認証を不可に設定します。
remote# vi /etc/ssh/sshd_config
PasswordAuthentication yes
↓
PasswordAuthentication no
(9)sshサーバーを再起動します。
remote# service sshd restart
sshd を再読み込み中:                                       [  OK  ]

以上。

参考ページ