我使用ansible在安裝後配置多臺計算機。ansible user當前用戶在配置
爲此我在機器上本地運行。安裝中的「主」用戶通常具有不同的名稱。我想使用該用戶的變量,如become_user
。 「主要」用戶也是用戶,他們調用ansible-playbook
。
那麼我可以設置「become_user」給調用ansible-playbook
的用戶嗎?
我使用ansible在安裝後配置多臺計算機。ansible user當前用戶在配置
爲此我在機器上本地運行。安裝中的「主」用戶通常具有不同的名稱。我想使用該用戶的變量,如become_user
。 「主要」用戶也是用戶,他們調用ansible-playbook
。
那麼我可以設置「become_user」給調用ansible-playbook
的用戶嗎?
不知道爲什麼你需要設置become_user
給您已經在運行你的劇本用戶,但您可以使用env
查找獲取USER
環境變量:
- hosts: localhost
tasks:
- debug: msg="{{ lookup('env','USER') }}"
@AK爲什麼? OP在他的劇本中需要用戶名env(儘管我不明白爲什麼) - 我給他一個選項。並強調他不應該以這種方式成爲用戶。 –
ansible-playbook
提供了--become-user
CLI標誌以及--ask-become-pass
(如果需要)。
在大多數情況下,這是一個糟糕的設置。您應該在所有機器上標準化user
,否則您必須分別爲每個用戶維護證書/密碼。
謝謝!用戶名是不同的,因爲我使用安全計算機的私人設置。這不是它的目的,但仍然非常好。 – Nathan
我意識到:-) – activatedgeek
沒有必要設置become_user
當playbook應該與啓動的用戶一起運行ansible-playbook
become用於權限升級。如果我得到這個問題,權限不需要升級。
它運行在PlayBook用戶的名稱可作爲ansible fact
{{ ansible_env.username }}
你對權限升級是正確的。事實彙總在遠端,所以你的解決方案只適用於控制主機與客戶端主機相同的情況(請參閱我的答案中的詳細信息) –
您可以控制主機上本地登錄爲「彌敦道」,而是要連接到其他服務器,在用戶ansible'(好ansible.cfg)
remote_user = ansible
如果你想遠程主機上連接爲「ansible」,並執行一個任務,根或Apache - 再sudo來根(Apache或其他用戶),你應該使用become_user
對於這個特殊的任務。
請注意,遠程服務器可能沒有控制主機上的用戶! (常見的方式)
在您的特殊情況下,如果您在本地登錄爲'nathan'並且希望以'nathan'連接到'remote'服務器,則應該省略remote_user
和become_user
:只需使用您當前的憑據登錄即可!
例如,組織中有兩個系統管理員:nathan和peter--所以,有兩個工作站(heidelberg-nathan和berlin-peter)作爲控制主機和數千個客戶。 nathan和peter都以nathan或peter的身份連接到遠程端並執行任務。他們每個人都可以使用非密碼sudoers來執行管理任務。好吧,我們來測試兩種解決方案(第一 - 來自Konstantin Suvorov的答案,第二 - 來自knowhy的答案)。
我的控制主機berlin-ansible-01,我以'nathan'登錄。遠程客戶端是主機berlin-client-01。我將以用戶'ansible'的身份登錄到客戶端主機。
我是不可能的。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
OP _在機器上本地運行_ –
@KonstantinSuvorov當然,但這種不正確_ 。我添加了一條評論來提問。 –
使用'remote_user'取代'become_user'連接遠程側。 'become_user'用於特權升級。 –