ssh公開鍵認証

SSHの鍵認証設定

More than 3 years have passed since last update.

いつも忘れるのでメモ。

鍵作成

$ cd ~/.ssh/
$ ssh-keygen -t rsa -f hoge_rsa

パスワード入力待ちになるのでパスワード入力。
(入力せずにEnterでパスワードなしの鍵ができるらしいが、自分はいつもつけてます。)

サーバーに鍵を転送

サーバー側に.sshディレクトリをあらかじめ作成しておく。

$ scp ./hoge_rsa.pub user@host:~/.ssh/

サーバー側の鍵設定

$ cd ~
$ chmod 700 .ssh
$ cd .ssh
$ cat hoge_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys
$ rm -fv hoge_rsa.pub

.sshディレクトリとauthorized_keysファイルのパーミッションを正しく設定しないとつながらないので注意。
これでハマること多し。

サーバー側sshd設定変更

$ su
パスワード:
# vi /etc/ssh/sshd_config

以下の行のコメントをはずして有効化する。

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

参考:追加の設定

PermitRootLogin

noに設定するとrootログインを禁止にできる。

PasswordAuthentication

noに設定するとパスワードログインを禁止にできる。
設定を間違って、鍵認証できない状態でパスワードログイン禁止にしてしまうとログインできなくなってしまうので、後から変更したほうが良い。

sshd再起動

再起動して設定を反映。

# which sshd
/usr/sbin/sshd
# /usr/sbin/sshd -t
(設定ファイルに間違いがなければ何も表示されない)
# service sshd restart

serviceはCentOSの場合。
他のディストリビューションの場合は違うかも。

クライアントからログイン確認

初回のみ-iオプションで秘密鍵の指定が必要。

$ ssh -i ~/.ssh/hoge_rsa user@host

エイリアス設定

クライアント側の~/.ssh/configを設定することで user@host の部分を省略できる。
これは鍵認証と直接関係ないが、やっておくと便利。

$ vi ~/.ssh/config
Host hoge-server
    HostName xxx.xxx.xxx.xxx
    User hoge
    IdentityFile ~/.ssh/hoge_rsa
$ chmod 600 ~/.ssh/config
$ ssh hoge-server

参考URL

鍵交換方式によるssh接続
SSHで公開鍵認証を使う
~/.ssh/config で簡単に複数ホストへのSSH接続を管理する