さくらのVPSへsshで接続できない PermissionDeny(publickey)

いつの間にか接続できなくなっていた!

以前は、公開鍵認証方式ssh接続ができていたのに、ある日突然

% Permission Deny(publickey)

と怒られ、リモートログインができなくなっていました。

今回、ググってもズバリ解決策が見つからず、その普及記録を残しておくことにします。一度sshの設定はしているので、そこは割愛。解決策は実は単純だった・・・。(ちなみにクライアント側はmac OSXになります。)

パスワード入力へ変更

さくらのVPSで用意されているリモートコンソールで接続して、公開鍵認証にしていたのをパスワード入力方式へ変更します。
これから何度もサーバとmac側でコマンドを実行しますので、切断せずにウインドウを開いておいてください。

最初にsshd_configファイルを開き、該当箇所を修正します。

$ sudo vi /etc/ssh/sshd_config

#公開鍵認証をオフにする
PubkeyAuthentication yes
↓
PubkeyAuthentication no 

#パスワード入力をオン
PasswordAuthentication no
↓
PasswordAuthentication yes

#sshdを再起動
$ sudo /etc/init.d/sshd restart

その後、sshで接続するとパスワードを入力してログインは完了!

どうやら公開鍵認証に何やら問題がありそうです。

認証鍵を再生成

サーバとローカルの.sshディレクトリ内の認証鍵をいったん削除します。

認証鍵ペアの削除

$ cd /home/ユーザー名/.ssh
#auhorized_keysを削除
$ rm authorized_keys
$ cd ~/.ssh
#公開鍵と秘密鍵を削除
$ rm id_rsa id_rsa.pub

これで認証鍵はすべて削除されましたので、もう一度最初から認証鍵を作り直します!

macのターミナルで以下のコマンドを入力して認証鍵のペアを作成します。

認証鍵ペアを再生成(または初めて認証鍵を作る場合)

$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/XXXXXXXX/.ssh/id_rsa):←そのままで良ければEnter

Enter passphrase (empty for no passphrase): ←今回パスフレーズは入れませんでした
Enter same passphrase again: ←今回パスフレーズは入れませんでした
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.

その後、生成した公開鍵をscpでサーバへ転送します。

$ scp ~/.ssh/id_rsa.pub hoge@[サーバのipアドレス]:/home/[ログインユーザー名]/.ssh

公開鍵の名前をauthorized_keysに変更して、パーミッションをユーザーだけが読み書きできるように600にします。

$ cd /home/[ログインユーザー名]/.ssh
$ cat id_rsa.pub >>  authorized_keys
$ chmod 600 authorized_keys

認証鍵のペアの生成が完了しました。もし、macとサーバの.sshディレクトリのパーミッションが700以外ならこれも変更しておいてください。

$ sudo chmod 700 /home/[ユーザー名]/.ssh 

鍵認証でログイン

sshd_configの編集

再度、/etc/ssh/sshd_configを編集します。

$ sudo vi /etc/ssh/sshd_config

#公開鍵認証をオンにする
PubkeyAuthentication no
↓
PubkeyAuthentication yes

#パスワード入力をオフ
PasswordAuthentication yes
↓
PasswordAuthentication no

#sshdを再起動
$ sudo /etc/init.d/sshd restart

ssh接続してみます。ssh接続するポートを変更しているので「-p 50000」になっていますが、ご自身の設定に合わせてポート番号を指定してください。

$ ssh -p 50000 [ログインユーザー名]@[VPSのIPアドレス]

結果は・・・ダメ!!!

ログの確認

ログを見るには、以下のコマンドで

$sudo tail -f /var/log/secure

ユーザーディレクトリの権限を変更

ホームディレクトリの確認

ホームに戻って、ユーザーの権限を見てみると、こんな感じでした。

$ cd ~/

#ユーザーの権限を見てみる
$ ls -al
total 24
drwxr-xr-x.  6 root             4096 Jun 25 15:39 .
dr-xr-xr-x. 25 root             4096 Jun 24 16:34 ..
drwxrw----  11 [ユーザー名]              4096 Jul 12 07:14 [ユーザー名]
drwx------   3 hoge 4096 Jun 25 15:39 hoge
drwx------   3 fuga           4096 Jun 25 15:39 fuga
drwx------   3 foo          4096 Jun 25 15:39 foo

ユーザーディレクトリの権限を変更

パーミションを700に変更します。

$ sudo chmod 700 [ユーザー名]

再度、ssh接続すると成功!これだったか・・・。

$ ssh -p 50000 [ログインユーザー名]@[VPSのIPアドレス]

まとめ

ググった時に「.sshのパーミッションを700に」や「authorized_keysを600に」というブログ記事はよくあるのですが、ユーザーディレクトリの権限については見つけられませんでした。

検索結果で出てきた通りにやったのにssh接続ができないという場合には、これもお試しください。

コラム