公開鍵認証でSSH接続しようとしたのにパスワードを求められた 2

以前も似たような現象に遭遇しましたが、原因が少し異なっていたので書き留めておきます。

経緯・状況

前回の状況と同じ状況です。 Ansible でリモートサーバを操作しようとしましたが、公開鍵認証のはずなのにパスワードを求められてしまいました。

現象

# ansible-playbook -i /workspace/ansible/targets/hosts /workspace/ansible/main.yml -u REMOTE_USER --private-key="/root/.ssh/PRIVATE_KEY" -K

BECOME password:

PLAY [Settings vsftpd and httpd] **********************************************************************************
TASK [Gathering Facts] ********************************************************************************************The authenticity of host 'ssh.example.com (ssh.example.com)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
fatal: [ssh.example.com]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Warning: 
Permanently added 'ssh.example.com' (ECDSA) to the list of known hosts.\r\nREMOTE_USER@ssh.example.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}

PLAY RECAP ********************************************************************************************************ssh.example.com              : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0 

プレイブックを実行しようとすると Permission denied で怒られました。

# ssh -i ~/.ssh/PRIVATE_KEY REMOTE_USER@ssh.example.com
REMOTE_USER@ssh.example.com's password: 
Permission denied, please try again.
REMOTE_USER@ssh.example.com's password:
Activate the web console with: systemctl enable --now cockpit.socket

Last login: DDD MMM dd hh:ii:ss yyyy from LOCAL_HOST
[REMOTE_USER@ssh ~]$

SSH接続 では公開鍵認証のはずなのにパスワードを求められます。

対処

/var/log/secure を確認すると、 Authentication refused: bad ownership or modes for directory /home/REMOTE_USER/.ssh のエラーメッセージが記録されていました。

調べてみると、 .sshディレクトリ の権限が誤った設定になっているとこのエラーが起きるとのこと。

.ssh/authorized_keys600 にしていましたが、ディレクトリの方は見落としていました。確認したところ、 775 でした。

これを chmod 755 /home/REMOTE_USER/.ssh で修正。

結果、公開鍵認証が成功するようになり、 Ansible のプレイブックも正常に動作するようになりました。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。