kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

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-argsSSH実行時の引数を指定できる。ただし、sftp/scp/sshのポートの指定方法の微妙な違いが問題になる。

  • --ssh-common-argssftp/scp/sshで利用されるが、ssh-psftp/scp-Pで異なるため、厳密には利用できない
  • --ssh-extra-args等で個別に利用できるが、だいぶ面倒

--ssh-common-args "-p 1234"で動作はするものの、WARNINGとなって厳密にはうまくない。ので、ansible_port変数を指定するほうが良い。