【ansible】关于remote_user参数的优先级指定
得出结论
-
- 以下の通り(左項で設定した値が優先される)。
-
- playbook > コマンドパラメータ > ansible.cfg
-
- ansible-playbookコマンドで -u (“remote_user”を指定するオプション) が効かなかったため、コードリーディングしたところ気がついた1。公式ドキュメントをよく読めば書いてあるかもしれない。
- playbookとコマンドパラメータどちらでも指定可能なその他の値についても、同様の動作をするはず。
确认操作
版本信息
$ ansible-playbook --version
ansible-playbook 1.9.3
确认步骤
- ansible.cfg及びplaybookにて、remote_user->root を指定
$ grep remote_user /etc/ansible/ansible.cfg
remote_user = root
$ head -5 test.yml
---
- hosts: all
vars:
remote_user: root
sudo: yes
- ansible-playbookコマンドを実行すると、-u オプションで指定したユーザではなく、rootユーザでssh接続しようとして失敗する(キーペアの不一致)
$ sudo ansible-playbook test.yml -l xxx.xxx.xxx.xxx -u ansibleuser --private-key="xxx.id_rsa" -vvv
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
<xxx.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: root ★
<xxx.xxx.xxx.xxx> REMOTE_MODULE setup
<xxx.xxx.xxx.xxx> EXEC ssh -C -tt -v -o ControlMaster=auto -o ControlPersist=60s -o ControlPath= ...
:
fatal: [xxx.xxx.xxx.xxx] => SSH Error: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
:
xxx.xxx.xxx.xxx : ok=0 changed=0 unreachable=1 failed=0
- playbookにて、remote_user行をコメントアウト
$ head -5 test.yml
---
- hosts: all
vars:
# remote_user: root
sudo: yes
- あらためてansible-playbookコマンドを実行すると、-u オプションで指定したユーザでssh接続に成功する
$ sudo ansible-playbook test.yml -l xxx.xxx.xxx.xxx -u ansibleuser --private-key="xxx.id_rsa" -vvv
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
<xxx.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: ansibleuser ★
<xxx.xxx.xxx.xxx> REMOTE_MODULE setup
<xxx.xxx.xxx.xxx> EXEC ssh -C -tt -v -o ControlMaster=auto -o ControlPersist=60s -o ControlPath= ...
:
ok: [xxx.xxx.xxx.xxx]
:
xxx.xxx.xxx.xxx : ok=1 changed=0 unreachable=0 failed=0
我所感受到的
-
- roleにまとめてうまいことやってくれという設計思想かもしれないが、ちょっとしたオペレーションをansibleで書きたい、既存環境がぐちゃぐちゃ、等の理由により、適宜コマンドパラメータで”remote_user”を指定したい場面はあると思う。
- そのため、ちょっとしたplaybookには”remote_user”を指定しないほうが融通がきいていいかなと思った。
关于”remote_user”的信息请点击此处↩