SSH ログインしたときに下記エラーが出る傾向と対策をまとめました。
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
まずログを見る
クライアント側でこのエラーが出たら、サーバー側の /var/log/secure
にエラーとなった原因が記録されます。最重要です。たとえば、
Feb 26 23:58:39 server sshd[29619]: Authentication refused: bad ownership or modes for file /home/user/.ssh/authorized_keys
みたいに書いてあると、所有者とパーミッションなどに絞って原因を見ていくことになります。
よく原因となる確認ポイントを下記に書いていきます。
接続先に authorized_keys が設置されているか
公開鍵認証する場合、接続する側のマシンで公開鍵と秘密鍵のペアを作成し、公開鍵を接続ユーザのホームディレクトリ配下 ~/.ssh/authorized_keys
に設置する必要があります。
パーミッションは適切か
公開鍵認証する場合、接続先のサーバで所有者とパーミッションが適切に設定されていることを確認します。
- /home/user/.ssh は 0700
- /home/user/.ssh/authorized_keys は 0600
にします。パーミッションに過不足があるとエラーになることがあります。
ユーザ追加時の設定を確認する
あれいつもはこれ確認したらつながるのに、なんで今日はダメなんだ? と思っていたら、ユーザ追加するときにログインシェルを設定していて、そのパスが存在していないのが原因でした。
具体的には、 Ansible で
---
- name: useradd youcune
user: name=youcune shell=/bin/zsh
とやっていました。この zsh のパスが存在しておらず失敗になっていたようです。死にたい。