2016-08-25 2 views
1

설치 후 여러 대의 컴퓨터를 구성 할 수 있습니다.구성에 현재 사용자가있는 사용자

이 경우 컴퓨터에서 로컬로 실행할 수 있습니다. 설치시 "기본"사용자는 종종 다른 이름을 사용합니다. become_user과 같은 변수에 해당 사용자를 사용하고 싶습니다. "기본"사용자는 ansible-playbook이라고하는 사용자이기도합니다.

ansible-playbook을 호출 한 사용자에게 어떻게해서 "become_user"를 설정할 수 있습니까?

+0

사용'remote_user' 대신'원격지를 연결하는 become_user'. 'become_user'는 권한 에스컬레이션을위한 것입니다. –

답변

3

당신은 이미 당신의 작전을 실행하는 사용자에게 become_user을 설정해야합니다,하지만 당신은 USER 환경 변수를 얻을 수 env 조회를 사용할 수있는 이유는 확실하지 :

- hosts: localhost 
    tasks: 
    - debug: msg="{{ lookup('env','USER') }}" 
+0

@AK 왜? OP는 자신의 플레이 북에 사용자 이름 env가 있어야합니다 (비록 내가 무엇을 위해서인지는 모르겠지만). 나는 그에게 옵션을줍니다. 그리고 그는 이런 식으로 사용자가 될 필요가 없다고 강조했다. –

1

ansible-playbook은 (필요한 경우) --ask-become-pass과 함께 --become-user CLI 플래그를 제공합니다.

대부분의 경우 이는 잘못된 설정입니다. user을 모든 컴퓨터에서 표준화해야합니다. 그렇지 않으면 각 사용자별로 certs/password를 유지 관리해야합니다.

+0

감사! 컴퓨터의 개인 설정에 사용할 수 있기 때문에 사용자 이름이 다릅니다. 그것은 의도 된 것이 아니지만 여전히 훌륭하게 작동합니다. – Nathan

+0

나는 그것을 깨달았다 :-) – activatedgeek

1

become_user를 설정할 필요가 없습니다를 플레이 북은 시작한 사용자와 함께 실행해야합니다. ansible-playbook

become은 권한 상승을위한 것입니다. 이 질문에 대한 권리가 있다면 에스컬레이션은 필요하지 않습니다. ansible fact{{ ansible_env.username }}

+0

권한 승격에 대해 옳았습니다. 사실은 원격 측면에서 수집되므로 제어 호스트가 클라이언트 호스트와 동일한 경우에만 솔루션이 적합합니다. 자세한 내용은 내 대답을 참조하십시오. –

1

당신은 '나단'로 제어 호스트에 로컬로 로그온 만에 사용자 ('ansible'더 나은로 다른 서버에 연결할 수

플레이 북을 실행하는 사용자의 이름을 사용할 수 있습니다 ansible.cfg)는 'ansible'로 연결하고 루트 또는 아파치로 하나 개의 작업을 수행 할 원격 호스트하려면

remote_user = ansible 

- 루트 (아파치 나 다른 사용자에게 다음 sudo를)이 특정 작업 become_user를 사용해야합니다 .

또한 원격 서버가 제어 호스트와 같은 사용자를 가질 수 없다는 점에 유의하십시오. (일반적인 방법으로)

'nathan'으로 로컬 로그온하고 'nathan'으로 '원격'서버에 연결하려는 경우, remote_userbecome_user을 모두 생략해야합니다. 현재 자격 증명으로 로그온하면됩니다!

예를 들어, nathan과 peter라는 두 개의 sysadminst가 있습니다. 따라서 제어 가능한 호스트와 수천 개의 클라이언트로 두 개의 워크 스테이션 (heidelberg-nathan 및 berlin-peter)이 있습니다. 네이선과 피터 모두 네이선이나 피터로서 원격 측에 연결하여 작업을 수행합니다. 그들 각각은 비 암호 sudoers로 관리 작업을 수행 할 수 있습니다.

추신 : 두 솔루션 (첫 번째 - Konstantin Suvorov의 대답, 두 번째 - knowhy의 대답)을 테스트 해 봅시다.

내 제어 호스트 berlin-ansible-01, 'nathan'으로 로그인했습니다. 원격 클라이언트는 호스트 berlin-client-01입니다. 나는 사용자로 '클라이언트'로 클라이언트 호스트에 로그인 할 것입니다.

내 책임.CFG는 다음과 같습니다

[defaults] 
sudo_flags=-HE 
hash_behaviour = merge 
retry_files_enabled = false 
log_path = ./main.log 
ask_vault_pass=true 
remote_user = ansible 

플레이 북은 간단하다 :

- name: test 
    hosts: '{{ target }}' 
    tasks: 
    - debug: msg="step 1 = {{ lookup('env','USER') }}" 
    - setup: 
    - debug: msg="step 2 = {{ hostvars[target].ansible_env.USER }}" 
#more than one client in taget needs iterate items: 
# - debug: msg="step 2 = {{ hostvars[item].ansible_env.USER }}" 
#  with_items: "{{ hostvars }}" 

이의 그것을 실행하자

[[email protected] stackoverflow]$ ansible-playbook -i hosts_staging test.yml --extra-vars "target=berlin-client-01" 
Vault password: 

PLAY [test] ******************************************************************** 

TASK [setup] ******************************************************************* 
ok: [berlin-client-01] 

TASK [debug] ******************************************************************* 
ok: [berlin-client-01] => { 
    "msg": "step 1 = nathan" 
} 

TASK [setup] ******************************************************************* 
ok: [berlin-client-01] 

TASK [debug] ******************************************************************* 
ok: [berlin-client-01] => { 
    "msg": "step 2 = ansible" 
} 

PLAY RECAP ********************************************************************* 
berlin-client-01    : ok=4 changed=0 unreachable=0 failed=0 
+0

OP _ 기계에서 로컬로 실행 _ –

+0

@ KonstantinSuvorov 물론이 잘못된 _ 일반적으로 _ . 질문 할 말을 추가했습니다. –

관련 문제