ansibleでユーザの切替を行う方法として、beccome/become_userモジュールの使用がある。
一方で、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実行をしているイメージなのだという理解をした。