ansibleで実行ユーザの切替

ansibleでユーザの切替を行う方法として、beccome/become_userモジュールの使用がある。

docs.ansible.com

一方で、suコマンドを使ってユーザを切り替えることができないか、確認をする。 以下のインベントリファイル、playbookを作成した。

$ cat test_inventory
[test_servers]
X.X.X.X

[test_servers:vars]
ansible_ssh_user=ubuntu
ansible_ssh_private_key_file="/home/ubuntu/.ssh/id_ed25519"

$ cat test_playbook.yml
- hosts: test_servers
  tasks:
  - name: change user
    command:
      cmd: 'echo "root"  | su root;'
      chdir: /home/ubuntu
  - name: make dir ubuntu
    command:
      cmd: 'mkdir testdir'
      chdir: /home/ubuntu
  - name: make dir root
    command:
      cmd: 'mkdir testdir'
      chdir: /root

動作確認

次に、ansibleのplaybookを実行してみる

$ ansible-playbook -i ./test_inventory ./test_playbook.yml
PLAY [test_servers] *****************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************
ok: [X.X.X.X]

TASK [change user] ******************************************************************************************************************************************************************
changed: [X.X.X.X]

TASK [make dir ubuntu] **************************************************************************************************************************************************************
changed: [X.X.X.X]

TASK [make dir root] ****************************************************************************************************************************************************************
fatal: [X.X.X.X]: FAILED! => {"changed": false, "cmd": ["mkdir", "testdir"], "delta": null, "end": null, "msg": "Unable to change directory before execution: [Errno 13] Permission denied: b'/root'", "rc": null, "start": null, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

PLAY RECAP **************************************************************************************************************************************************************************
X.X.X.X            : ok=3    changed=2    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

アクセス先(X.X.X.X)で作成したディレクトリを確認する。

$ ll /home/ubuntu |grep testdir
drwxrwxr-x 2 ubuntu ubuntu   4096 Dec 26 23:12 testdir/

これらより、suコマンドの切替はできないことを確認した。 ansibleは1taskごとに、sshをしてtask実行をしているイメージなのだという理解をした。