環境
-
ホストOS
- Windows10
-
ゲストOS
- Centos7 (Ansibleをインストールしてあるサーバ)
- Centos8 * 2 (この子たちに設定したいサーバ)
-
SSHクライアント
- PowerShell 7.1.0-preview.3
本篇
Ansibleの勉強を始めようと思い立ち、とりあえずApacheをインストールしようとしていたところ、こんなエラーが出た.
###エラー内容
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see
details
PLAY [all] ***********************************************************************************
TASK [Gathering Facts] ***********************************************************************
fatal: [Server1]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}
fatal: [Server2]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}
PLAY RECAP ***********************************************************************************
Server1 : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0
Server2 : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0
- UNREACHABLE!の通り、サーバまで届いてない
- changedも、falseなので変更されてない
- msgにある内容は、「SSHでアクセスしようとしたら、Permission denied (権限なかったぽ)」って感じ
###Playbookの内容
test-ansible.yml
---
- hosts: all
become: true
handlers:
- name: restart httpd
service: name=httpd state=restarted
tasks:
- name: dnf install httpd
dnf: name="httpd" state=latest
####記述内容
- hostsに記載のすべてに実行(今回は全サーバ)
- 管理者権限でコマンドを実行
- もし、httpdに変更が加えられたら、serviceコマンドから再起動
- httpdの最新版をインストール(CentOS8が相手なので、dnfコマンドを実行)
###実行時のコマンド
ansible-playbook test-ansible.yml
- 単純にtest-ansible.ymlを実行
###解決策
- 対象サーバ(CentOS8)はパスワード認証を使っているにもかかわらず、その認証を行っていなかった
####公開鍵を使う方法
こちら
ssh-copy-id コマンドで対象サーバーに公開鍵を設置してみたところ上手くいきました。
####configファイルに記載する方法
- ansible.cfgに下記の内容を追記する
ansible.cfg
[defaults]
ask_pass = True
- ただし、この方法の場合毎回パスワード認証を行うかも...
####実行コマンドに追記する方法
- 実行時のコマンドに、--ask-passを追加
ansible-playbook --ask-pass test-ansible.yml
##参考にさせていただいたサイト
キュア子の開発ブログ様
わくわくBank.様