Failed to connect to the host via ssh: Permission denied (publickey)

Ansibleやってる人はこんなエラーを見たことがあるだろうか。久しぶりにハマったのでブログしたいと思う。ハマったというかopensshの仕様を忘れていた件。。。


■具体的なエラー

もちろんDry runやっても同じエラー。


■環境

  1. 踏み台から各サーバにansibleでssh(AWS)
  2. 踏み台からconfigを使ってsshは繋がる(ansibleユーザからec2-userで)
  3. ansibleのバージョン:2.2.1.0

・ちなみにconfigはこんな感じ


■原因を調べてみた

そもそも踏み台からsshできるのに何故!?とりあえず-vvvvでどんなことが起きてるのか出力されるのでやってみた。

デフォルトでid_rsaを見に行くのは必然的にopensshの仕様だった。。


■解決

つまりAnsible初回時の設定としては以下の2ついずれかがマッチしていればOK

  1. ~/.ssh/configにHost、HostNameを書いて名前解決をしてsshできるようにする
  2. ansible.cfgで名前解決をする


■ssh(1) – Linux man page

https://linux.die.net/man/1/ssh

デフォルトの鍵がid_rsaであることのソースは以下。

-i identity_file
Selects a file from which the identity (private key) for RSA or DSA authentication is read.
The default is ~/.ssh/identity for protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for protocol version 2.
Identity files may also be specified on a per-host basis in the configuration file.
It is possible to have multiple -i options (and multiple identities specified in configuration files).

(訳)
RSAまたはDSA認証のID(秘密鍵)が読み取られるファイルを選択します。
デフォルトはプロトコルバージョン1の場合は~/.ssh/identity、プロトコルバージョン2の場合は~/.ssh/ id_rsa、~/.ssh /id_dsaです。
アイデンティティファイルは設定ファイル内のホスト単位で指定することもできます。
複数の-iオプション(および設定ファイルで指定された複数のアイデンティティ)を持つことは可能です。


■まとめ

自分の思い違いはコワイ。

参考
http://dev.classmethod.jp/server-side/ansible/enable_ssh_conf_using_via_ansible-cnf/

カテゴリー: AnsibleBlogSSH

adachin

1989年生まれのFindy/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTA/TechBullで未経験者にインフラのコーチング/コミュニティマネージャーとして立ち上げと運営をしている。また、過去「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください