LINEで送る
Pocket

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/

LINEで送る
Pocket

カテゴリー: AnsibleBlogSSH

adachin

1989年生まれのSRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、AnsibleやTerraformでのインフラコード化を推進。副業では数社サーバー保守、未経験によるエンジニアのメンターなども実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、Wordpressによるコーポレートサイトの修正、メンター、分析基盤の運用を担当している。

0件のコメント

コメントを残す

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