以前も似たような現象に遭遇しましたが、原因が少し異なっていたので書き留めておきます。
経緯・状況
前回の状況と同じ状況です。 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_keys
は 600
にしていましたが、ディレクトリの方は見落としていました。確認したところ、 775
でした。
これを chmod 755 /home/REMOTE_USER/.ssh
で修正。
結果、公開鍵認証が成功するようになり、 Ansible のプレイブックも正常に動作するようになりました。