2016-10-05 6 views
0

デフォルトSSH接続のオーバーライドが必要な状況があります。同じで、今 SUDOユーザーとのSSHログインユーザーの無効化

[dev:vars] 
ansible_ssh_user=TargetUser1 

我々はansibleマスターとしてジェンキンスエージェントを使用すると、私たちは「JenkinsUser」(ジェンキンス)と「TargetUser1」(ターゲット)との間にSSHを設定していると、インベントリファイルで定義されています私は "TargetUser2"によって所有されている別のタスクセットを持っており、 "TargetUser1"はそれらを実行する権限を持つことができません。しかし、同じ "JenkinsUser"には "TargetUser2"に対するSUDO権限があります。私の脚本は

- hosts: dev 
    remote_user: JenkinsUser 
    become_method: sudo 
    become_user: TargetUser2 
    tasks: 
    - command: whoami 

、のように期待される結果になります:JenkinsUserはTargetUser1に、デフォルトのSSHの設定を上書きし、TargetUser2にホストとsudoをターゲットにSSHでしょう。

ランタイム結果:SSH接続はREMOTE_USER一方TargetUser1の代わりJenkinsUserとして起こっている:

TASK [setup]  
<xyz.somehost.com> ESTABLISH CONNECTION FOR USER: TargetUser1 on PORT 
22 TO xyz.somehost.com 

答えて

0

あなたの観察された行動は非常に聞こえる:JenkinsUserは

Ansible-脚本-vvv出力はデフォルトansible_ssh_userをオーバーライドする必要があります論理的。 ansible_ssh_userは接続するユーザ名ですが、becameメソッドはすでにホストにログインしている場合にのみ使用されます。あなたの代わりに試みることができる

いくつかのアイデア:

  • TargetUser2
  • dev上または
  • (例えばset_factを使用して)プレイ中にオンザフライで変更ansible_ssh_userまたは
  • になることを​​ため sudo権を追加し、別のホストを作成します [email protected]および [email protected]または
  • セットansible_ssh_user〜のエイリアス3210とユーザの2つのタイプがありますごとタスク
+0

私は、ホストにログインするとユーザーになることを理解していますが、それがターゲットホストユーザー(TargetUser1)になります。 JenkinsUser)?安全でない文書は、それがどのように機能するかについての明確な説明を提供していない。 – Jninja

2

become_user​​/TargetUser2を使用します。

  • リモートユーザは - Ansibleは、このアカウントを使ってSSH接続が
  • ユーザーなってます -のSSH接続が確立された後に、このユーザーには「可能」となりますお使いの設定では

、Ansibleは常に​​で接続し、与えられた遊びのために作られ​​を使用して接続した後TargetUser2になることをしようとします。

あなたの説明から、​​でリモートボックスに接続でき、JenkinsUserと接続してTargetUser2になることがわかっています。この場合、
は、次の操作を実行できます。

- hosts: dev 
    remote_user: JenkinsUser 
    become: true 
    become_method: sudo 
    become_user: TargetUser2 

あなたがプレイまたは特定のタスクのためにremote_userbecome_userを設定することができます。

+0

ターゲットホストで "JenkinsUser"とはみなされません。ここのremote_userは、SSHが確立されている「TargetUser1」になります。上記のオプションを試してみましたが、動作していないようです。安全なドキュメントでは、remote_userはマシンにログインしているユーザーで、この場合は「TargetUser1」となります。 – Jninja

+0

Play varsには、ホスト変数に[優先度](http://docs.ansible.com/ansible/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable)があるため、 'remote_user:JenkinsUser' 'ansible_ssh_user = TargetUser1'の設定を上書きします。 AnsibleはJenkinsUserとリモートマシンにsshを実行します。これがあなたの質問に答えられない場合は、 'ansible-playbook -vvv'ログでOPを改善し、何が間違っているのかを強調してください。そうすれば、より正確な答えを得ることができます。 –

0

在庫:

[dev:vars] 
ansible_ssh_user=TargetUser1 

脚本:

- hosts: dev 
    tasks: 
    - command: whoami 

コマンド:

ansible-playbook -i inventory playbook.yml -e "ansible_ssh_user=JenkinsUser ansible_ssh_pass={{JenkinsUserPassword}} 

Ansibleは、ローカル、リモートおよびなる3人のユーザー、扱っています。 become_userはremote_userからのものでなければなりません。私の必要性はlocal_userが不可能なbecome_userになるようにしていたため、私は追加のバールの在庫にデフォルトのansible_ssh_userをオーバーライドしました。今度はbecome_userが無効になるlocal_user

関連する問題