如何在服务器设置期间切换出root帐号?

时间:2017-02-18 21:55:26

标签: ansible

我需要自动部署一些远程Debian服务器。这些服务器只带有root帐户。我希望这样,我唯一需要以root身份登录的时间是在设置过程中。后续登录将使用常规用户帐户完成,该帐户将在设置过程中创建。

但在设置过程中,我需要在PermitRootLogin no中设置PasswordAuthentication no/etc/ssh/sshd_config。然后我会做service sshd restart。这将停止ssh连接,因为ansible已使用root帐户登录到服务器。

我的问题是:如何将ansible ssh放入root帐户,创建常规用户帐户,设置PermitRootLogin noPasswordAuthentication no,然后使用常规用户帐户ssh进入服务器并执行剩下的设置任务?

我的设置过程完全有可能存在缺陷。我会很感激的建议。

2 个答案:

答案 0 :(得分:1)

您可以使用Ansible实际管理整个设置过程,而无需手动配置先决条件。

有趣的是,您可以使用ansible_user动态更改ansible_passwordset_fact。使用新凭据执行set_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...

因此,您的设置手册可能类似于:

  1. 最初使用root帐户登录
  2. 创建常规用户并设置密码或配置authorized_keys
  3. 配置sudoers以允许常规用户以root身份执行命令
  4. 使用set_fact切换到该帐户的其余部分(请记住在此之后的任务中使用become: true,因为您已从root用户切换到普通用户。您甚至可以尝试执行锁定root之前的测试sudo命令)
  5. 更改sshd配置
  6. 执行kill -HUP <sshd_pid>
  7. 通过将ansible_user设置回root来验证,如果登录失败则验证

答案 1 :(得分:0)

您可能只想创建一个标准用户帐户并将其添加到sudoers。然后,您可以使用标准用户运行ansible,如果需要以root运行命令,则只需使用sudo命令作为前缀。

我写了一篇关于设置部署用户的文章 http://www.altmake.com/2013/03/06/secure-lamp-setup-on-amazon-linux-ami/