AnsibleでSSH接続のポートを指定する
ansible_port
変数の値をPlaybook/インベントリで指定するansible-playbook
の--extra-vars
で指定ansible-playbook
の--ssh-common-args
理解すると、まあ、その通りなのだけど、だいぶ迷走したのでまとめとく。
環境
- Ansible 2.9.6
- Ubuntu 20.04.1 LTS (WSL2)
ansible_port
変数の値を指定する
SSHで使用するポート番号は、ansible_port
という「変数」で指定することができる。「変数」なので、変数を指定する方法で指定できる。
なお、ansible_ssh_port
でも動作するが、2.0以降はdeprecatedになっている。
Playbookで指定
- hosts: servers remote_user: root vars: ansible_port: 1234
インベントリから引っ張ってくることもできる。
- hosts: servers remote_user: "{{ user_name }}" vars: ansible_port: "{{ ssh_port }}"
今回やりたかったのはこれ。以下のような運用を考えたため。
- サーバーのセットアップは22で行って、それ以降は作業用ユーザー、変更したポートで行う
- インベントリファイルを共有したい
- セットアップでユーザー作成とポート変更を行い、同じインベントリを使って、以降の作業用Playbookを使用する
インベントリで指定
インベントリファイルでも指定できる。
[servers] 192.168.10.100 ansible_port=1234 [servers:vars] ansible_port=1234
ansible-playbook
の引数で変更
ansible-playbook
の実行時に、--extra-vars
で指定できる。
$ ansible-playbook -i inventory.ini playbook.yml --extra-vars "ansible_port=1234"
ansible-playbook
の--ssh-common-args
ansible-playbook
の実行時に、--ssh-common-args
でSSH実行時の引数を指定できる。ただし、sftp
/scp
/ssh
のポートの指定方法の微妙な違いが問題になる。
--ssh-common-args
はsftp
/scp
/ssh
で利用されるが、ssh
は-p
、sftp
/scp
は-P
で異なるため、厳密には利用できない--ssh-extra-args
等で個別に利用できるが、だいぶ面倒
--ssh-common-args "-p 1234"
で動作はするものの、WARNINGとなって厳密にはうまくない。ので、ansible_port
変数を指定するほうが良い。