公開鍵暗号でSSHにログイン出来ずにはまりました[CentOS]

Pocket

最近,某国からSSHでログインしようとする方が増えてきています.もちろん,rootでのログインを禁止しているのと,Denyhostsでブロックしているのですが,さすがにちょっと心配になってきました.

そこで,今回はCentOS 6.6にて公開鍵暗号方式を使用してTeraTermやWinSCPでログインするようにしてみました.

Ads

公開鍵暗号方式とは

公開鍵暗号方式とは,公開鍵によって暗号化し,秘密鍵によってのみ復号することができる暗号方式です.

今回はサーバー上でユーザーアカウントxxxxにて公開鍵id_rsa.pubと秘密鍵id_rsaを作成し,id_rsa.pubはauthorized_keyにリネームし,秘密鍵は自分のPCにコピーしてサーバーから削除し,ログインの際に使用します.

サーバー上での作業

ユーザーでログインしたら,/home/xxxxx/.sshフォルダを作成しておきます.

$ mkdir .ssh

次に,ユーザーアカウントのままで次のコマンドを入力.

$ ssh-keygen -t rsa

すると最初はキーをどこに保存するかを聞いてくるので,/home/xxxxx/.ssh/id_rsaで良ければEnterキーを押します.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/xxxxx/.ssh/id_rsa):

次に,パスフレーズを聞かれるので2回入力しておきます.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/xxxxx/.ssh/id_rsa.
Your public key has been saved in /home/xxxxx/.ssh/id_rsa.pub.

ここまで来たら/home/xxxxx/.ssh/にある2つのファイルを確認しておきましょう.

公開鍵のid_rsa.pubはauthorized_keysにファイル名を変更(authorized_keysがないことを確認)してパーミッションの変更をしておきます.

$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys

また,秘密鍵はWinSCPなどで転送しておきましょう.転送後は削除して構いません.

SSHの設定変更(要root)

次に,rootになってから/etc/ssh/sshd_configを編集します.

# vim /etc/ssh/sshd_config

sshd_configではまず1ヶ所変更します.

#RSAAuthentication yes
#PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

へ.保存したらSSHDの再起動.

# service sshd restart

TeraTermでのログイン

次はTeraTermでのログインです.最初の画面は普通にOKを押して,

TeraTerm_01

次のSSH認証の画面でユーザーアカウント名xxxxxとパスフレーズを入力して「RSA/DSA鍵を使う」をチェックして秘密鍵(id_rsa)を選択します.

TeraTerm_02

それでログイン出来ればOKです.確認できたらrootになって/etc/ssh/sshd.configにある,

PasswordAuthentication yes

PasswordAuthentication no

に変更します.もう一度sshdを再起動したら公開鍵暗号方式でしかログインできなくなります.

なぜかログイン出来ない…

ここまでちゃんと設定したはずなのになぜだかログイン出来ませんでした./var/log/secureを見たところ,

Dec xx xx:xx:xx nan-hen sshd[4715]: Authentication refused: bad ownership or modes for directory /home/xxxxx/.ssh

となっていました.「Authentication refused bad ownership」とあるのでパーミッションが原因だろうと思って調べてみたところ,同じように悩んでいた人(SSHが鍵認証されないとき、パーミッションを疑え。 )を発見しました.

この記事を読むと,/home/xxxxxディレクトリのパーミッションが原因とのこと.早速,

# chmod 755 /home/xxxxx

としたところ,無事にTeraTermでログインできました.

WinSCPでの公開鍵認証

TeraTermでログイン出来るようになったのですが,WinSCPでファイル転送が出来るようにしたいのでWinSCPで公開鍵認証ができるようにしました.ポイントはputtyでid_rsaをid_rsa.ppkに変換することです.

puttyをダウンロードしてputtygen.exeを起動します.「Actions」にある「Load」から「id_rsa」を開いて「Save private key」からid_rsa.ppkで保存します.

putty_1

そして,WinSCPから設定→SSH→認証にある秘密鍵からid_rsa.ppkを選択すればOK.

winscp_1

アカウント名とパスフレーズを入力したらログイン出来るようになりました.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です