質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.34%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

1回答

270閲覧

AnsibleにてTargetノードに疎通確認を実施する方法

falifa

総合スコア8

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

1グッド

0クリップ

投稿2024/10/08 10:57

実現したいこと

Targetノードにpingで疎通確認をしたい

発生している問題・分からないこと

コントロールからターゲットノードに対して疎通確認ができない。
コントロールでインストール直後インベントリを作成し、pingコマンドを実施した際には「Permission denied」エラーが出ました。

[root@test1 ~]# ansible all -m ping node-1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: root@ターゲットノードのプライベートIP: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true } [root@test1 ~]#

その後、ansible.cfgにてデフォルトでコメントアウトされていた「inventory=/etc/ansible/hosts」を有効にしたらエラー内容が変わり現在に至ります。

コントロールノードでansible.cfgの設定が他に必要なのか、ターゲットノードにも何か設定を行う必要があるのか分かりません。

インベントリファイルの内容は

[root@test1 ~]# cat /etc/ansible/hosts [web] ansible_target=ターゲットノードのプライベートIP [root@test1 ~]#

エラーメッセージ

error

1[root@test1 ~]# ansible all -m ping 2ansible_target=ターゲットノードのプライベートIP | UNREACHABLE! => { 3 "changed": false, 4 "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname ansible_target=ターゲットノードのプライベートIP: Name or service not known", 5 "unreachable": true 6} 7[root@test1 ~]#

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

当初SSH接続に問題があるのかと思いましたがsshコマンドは通ったので自己解決ができなくなってしまいました。

補足

特になし

endy👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「ターゲットノードはLinuxであり、test1サーバのrootユーザから手動でSSH接続した場合はroot@プライベートIPにSSHログインできる状態である」という前提でご回答します。
なおそのものズバリな原因特定は現時点では難しく、できるのは切り分けのご案内までとなります。

1回目のping実行について

json

1"msg": "Failed to connect to the host via ssh: root@ターゲットノードのプライベートIP: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",

エラーメッセージを抜粋しました。
エラーの意味は「公開鍵認証やパスワード認証によるSSHログインに失敗した」という内容です。
AnsibleがSSH接続する条件と、手動でSSHを試みた際の条件を比較してみてください。

以下のあたりがチェック項目となります。

  1. 手動でSSHして成功したときのユーザー名、宛先IPはAnsibleのエラーに表示された内容 (root@プライベートIP) と同一でしょうか?
  2. 手動でSSHに成功したときの認証方法は何でしょうか? (パスワード認証、SSH公開鍵認証など。また公開鍵はパスフレーズ不要の方式でしょうか?) 手動SSH実行時にパスワードが必要な場合、Ansible実行時にもコマンドラインオプションやインベントリファイルなどでパスワード相当の情報指定が必要となります。指定がないと今回のエラーになるはずです。パスワードの指定方法は、次セクションの「2回目のping実行について」のサンプル3を参考にしてください

2回目のping実行について

ini

1[web] 2ansible_target=ターゲットノードのプライベートIP

/etc/ansible/hostsを抜粋しました。
こちらのインベントリファイルは書き方に誤りがあります。
今回の書き方だとansible_target=ターゲットノードのプライベートIPというFQDNを名前解決しようとして失敗してしまいます。

以下に正しい書き方のサンプルをいくつか挙げておきます。
(プライベートIP = 10.0.0.1と仮定して記述しておきます)

↓サンプル1

ini

1[web] 210.0.0.1

↓サンプル2

ini

1[web] 2node-1 ansible_host=10.0.0.1

↓サンプル3。SSHログイン時にパスワードが必要な場合は以下のように指定します。

ini

1[web] 2node-1 ansible_host=10.0.0.1 ansible_user=root ansible_password=PASSWORD

解決への道筋

inventory=/etc/ansible/hostsを無効化して「1回目のping実行」の状態に戻しつつ、上に記載した切り分けを進めていってください。
私の仮説が正しければエラーの原因を見つけて対処できると思います。

もし解決が難しければ、以下の追加情報をいただけると助かります。

  1. ansible-config dump --only-changedの出力内容 (※) inventory=/etc/ansible/hostsを無効にした上で実行してください
  2. 上記出力を参考にしつつ、「1回目のping」を実行したときのインベントリファイルを添付してください。IPアドレスや認証情報など、機微な情報はマスクしてください

参考URL

投稿2024/10/08 14:56

編集2024/10/08 15:02
stopendy0122

総合スコア170

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

falifa

2024/10/08 15:39

回答いただきありがとうございます。 すみません、前提の環境について記載がありませんでした。今回はAmazon Linux2の2台構成です。 1.について 1. 手動でSSHする時は ssh. root@パブリックIPで実施しているので同一ではありません。 2. ssh. root@パブリックIP→パスワードで接続のためパスワード認証をとっています。(sshd_configにてPermitRootLogin yes としています) 2.について 上記2. の回答より、SSHログイン時にパスワードが必要のため、サンプル3が該当しそうな気がします。 ご指摘の通り、まずはインベントリを無効化して切り分けをしながら再度チャレンジしてみます。
falifa

2024/10/08 15:58

無事に解決することができました。 サンプル3の方法を試したところ無事解決できました。 「ansible all -m ping」でも「ansible all -u root -k -m ping」でSSHパスワードを入力する方法もいけました。 ありがとうございました。
stopendy0122

2024/10/08 16:10

良かったです! 遅くまでお疲れさまでした。 インベントリファイルとコマンドライン引数の両方のやり方でパスワード指定できた点もお見事です。 ご記載いただいた-u, -kがまさに必要なオプションでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.34%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問