サーバーにSSHで接続し、別のユーザーとしてコマンドを実行できるようにAnsibleとSudoを構成するのに問題があります。
以下の質問/回答とAnsibleのドキュメントをここで確認しました: http://docs.ansible.com/intro_inventory.html
しかし、私はまだそれを動作させることができません。
誰かが私を正しい軌道に乗せることができますか?.
参照:
https://stackoverflow.com/questions/24743085/ansible-ssh-as-one-user-and-Sudo-as-anotherAnsible:ホストごとに異なるSudoユーザーを使用
私はこれをやろうとしています:
server-01 client-01
--------- -----------
foo ----> ssh ---> foo
bar - Sudo as root user
Ansibleを使用して、server-01からclient-01に接続します
ユーザーfooを使用してから、Sudoを使用してユーザーバーとしてコマンドを実行します。ユーザーバーは、任意のコマンドを実行できるように設定されています。
ただし、SudoまたはAnsibleの場合、問題がどこにあるのかわかりません。問題は須藤にあると思いますが、どこにあるのかわかりません。
このansibleコマンドは機能します:
[foo@server-01 ~]$ **ansible client-01 -m raw -a "touch /var/tmp/testfile" --ask-Sudo-pass**
Sudo password: ********* ( password for foo user )
client-01 | success | rc=0 >>
これは機能しません:
[foo@server-01 ~]$ ansible client-01 -m raw -a "touch /etc/testfile" --ask-Sudo-pass
Sudo password: ********* ( password for foo user )
client-01 | FAILED | rc=1 >>
touch: cannot touch `/etc/testfile': Permission denied
ユーザーfooのserver-01とclient-01の間にパスワードを設定せずにSSH認証を行っていますが、正常に機能します。
[foo@server-01 ~]$ id
uid=96(foo) gid=96(foo) groups=96(foo)
[foo@server-01 ~]$ su - foo
Password:
[foo@server-01 ~]$
[foo@server-01 ~]$
[foo@server-01 ~]$ ssh client-01
Last login: Thu Jan 15 16:32:05 2015 from server-01
[foo@client-01 ~]$
これは私の設定です:
server-01: /etc/ansible/hosts
-------------------------------------
[clients]
client-01 ansible_Sudo=true ansible_ssh_user=foo ansible_Sudo_user=bar
client-01: /etc/sudoers
-------------------------------------
[root@client-01 ~]# cat /etc/sudoers
#
root ALL=(ALL) ALL
bar ALL=(ALL) ALL
foo ALL=(bar) NOPASSWD: ALL
宛先サーバー(client-01)にいるとき、Sudoをテストできます。須藤さんが動かない部分だと思いますが、そのせいでAnsiblePlaybookをセットアップできません。
[root@client-01 ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[root@client-01 ~]# su - bar
[bar@client-01 ~]$ Sudo -l
[Sudo] password for bar:
User bar may run the following commands on this Host:
(ALL) ALL
[bar@client-01 ~]$ Sudo touch /etc/tempfile
[bar@client-01 ~]$ ls -alp /etc/tempfile
-rw-r--r-- 1 root root 0 Jan 15 17:08 /etc/tempfile
[bar@client-01 ~]$ Sudo rm /etc/tempfile
[bar@client-01 ~]$ exit
logout
[root@client-01 ~]# su - foo
[foo@client-01 ~]$ Sudo -l
User foo may run the following commands on this Host:
(bar) NOPASSWD: ALL
[foo@client-01 ~]$ Sudo touch /etc/tempfile
[Sudo] password for foo:
Sorry, user foo is not allowed to execute '/bin/touch /etc/tempfile' as root on client-01.
[foo@client-01 ~]$ exit
logout
多分これは失敗している行です:
foo ALL=(bar) NOPASSWD: ALL
助けてくれてありがとう。
touch
しようとしているパスであるため、これはファイルシステムの問題であり、Ansibleの問題ではないと思います。更新:
今のところ、Sudoersのファイルの(bar)
をALL
に置き換えてみて、それが機能するかどうかを確認してください。