web-dev-qa-db-ja.com

1人のユーザーとしてのAnsibleSSHと別のユーザーとしてのSudo

サーバーに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

助けてくれてありがとう。

2
Stuart
  • 通常どおりボックスにSSHで接続して、両方のコマンドを実行できますか?唯一の違いは、touchしようとしているパスであるため、これはファイルシステムの問題であり、Ansibleの問題ではないと思います。

更新:

今のところ、Sudoersのファイルの(bar)ALLに置き換えてみて、それが機能するかどうかを確認してください。

1
shearn89