2017-02-18 73 views
1

我需要自動部署一些遠程Debian服務器。這些服務器只有根帳戶。我希望這樣做是唯一一次我需要以root身份登錄的過程。後續登錄將使用常規用戶帳戶完成,該用戶帳戶將在設置過程中創建。如何在服務器設置期間切換出根帳戶?

但是在設置過程中,我需要在/etc/ssh/sshd_config中設置PermitRootLogin noPasswordAuthentication no。然後我會做一個service sshd restart。這將停止ssh連接,因爲ansible使用root帳戶登錄到服務器。

我的問題是:如何在root帳戶中創建一個正常的用戶帳戶,設置PermitRootLogin noPasswordAuthentication no,然後使用常規用戶帳戶ssh進入服務器,並執行其餘的設置任務?

我的設置過程完全有可能存在缺陷。我會很感激的建議。

回答

1

實際上,你可以管理與Ansible在整個安裝過程的文章,而不需要手動配置的先決條件。

有趣的是,您可以使用set_fact即時更改ansible_useransible_passwordset_fact後執行剩餘任務將使用新的憑證來執行:

- name: "Switch remote user on the fly" 
    hosts: my_new_hosts 
    vars: 
    reg_ansible_user: "regular_user" 
    reg_ansible_password: "secret_pw" 
    gather_facts: false 
    become: false 
    tasks: 

    - name: "(before) check login user" 
    command: whoami 
    register: result_before 

    - debug: msg="(before) whoami={{ result_before.stdout }}" 

    - name: "change ansible_user and ansible_password" 
    set_fact: 
     ansible_user: "{{ reg_ansible_user }}" 
     ansible_password: "{{ reg_ansible_password }}" 

    - name: "(after) check login user" 
    command: whoami 
    register: result_after 

    - debug: msg="(after) whoami={{ result_after.stdout }}" 

而且,你不必完全重新啓動sshd使配置更改生效,和現有的SSH連接將保持打開狀態。每sshd(8)手冊頁: sshd rereads its configuration file when it receives a hangup signal, SIGHUP...

所以,你設置的劇本可能是這樣的:用root帳戶

  1. 登錄最初
  2. 創建普通用戶並設置其密碼或配置authorized_keys
  3. 配置sudoers文件允許普通用戶以root用戶身份執行命令
  4. 使用set_fact切換到該帳戶的剩餘操作手冊(請記住在此之後的任務上使用become: true,因爲您已從根目錄切換到註冊ular用戶。你甚至可以嘗試鎖定深挖
  5. 改變sshd的配置之前)執行測試sudo命令
  6. 執行kill -HUP<sshd_pid>
  7. 通過設置ansible_user回根驗證,失敗,如果登錄工作
相關問題