トップページに戻る


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

注意: あらかじめ初期設定は終わっていることを前提としています。
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
鍵の登録後、リモートからのアクセスを公開鍵認証のみに設定するには次のように設定した後、sshdを再起動してください。手順(7)に進みます。
PasswordAuthentication  no
ChallengeResponseAuthentication  no
UsePAM  yes

参考

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

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$
設定を間違っていなければ、パスワード無しで認証出来るようになったはずです。

以上。

参考ページ