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

Ansibleコントロールノード を Dockerコンテナ でビルドし、リモートサーバに公開鍵認証でSSH接続してインストール済みのパッケージの一覧を取得するまでのトライアンドエラーの間の一幕です。

リモートサーバに公開鍵認証でSSH接続しようとしたのにパスワードを求められる現象に遭遇したのでメモ。

経緯・状況

経緯・状況としては以下のようなシチュエーションです。

  • Ansible の試験をしたい
  • Dockerコンテナ を Ansible のコントロールノードとして、外部ネットワークのリモートサーバに接続したい
  • リモートサーバへのSSH接続には公開鍵認証を使用

今回は上述の3番目の部分で引っかかったお話です。

現象

# ssh -i ~/.ssh/id_rsa SSH_REMOTEUSER@XXX.XXX.XXX.XXX
The authenticity of host 'XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)' can't be established.
ECDSA key fingerprint is SHA256:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts.
{ユー??? SSH_REMOTEUSER@XXX.XXX.XXX.XXX's password:

※一部分文字化けしていてメッセージが分からないところがありました。

公開鍵認証のはずだったのに、最後の行のようにパスワード認証を求められてしまいました。

対処

Warning: Permanently added 'XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts. の警告メッセージを検索したところ、「 known_hosts ファイルにログイン対象であるリモートサーバに対して鍵が重複してしまったこと」が原因の模様。

そのため、一覧から削除します。

# vi /root/.ssh/known_hosts

XXX.XXX.XXX.XXX ecdsa-sha2-nistp256 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ(以下略

今回は known_hosts ファイルに1行しか既述がなく、また先頭のIPアドレスもログイン対象のリモートサーバのものだったので、 dd で削除して :wq で保存。

これで再度挑戦。

# ssh -i ~/.ssh/id_rsa SSH_REMOTEUSER@XXX.XXX.XXX.XXX
The authenticity of host 'XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)' can't be established.
ECDSA key fingerprint is SHA256:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts.
Last login: Wek Mon dd hh:ii:ss yyyy from YYY.YYY.YYY.YYY

#

ログイン成功、本来意図した挙動になりました。

参考

この記事を書いた人

アルム=バンド

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