我需要自动部署一些远程Debian服务器。这些服务器只带有root帐户。我希望这样,我唯一需要以root身份登录的时间是在设置过程中。后续登录将使用常规用户帐户完成,该帐户将在设置过程中创建。
但在设置过程中,我需要在PermitRootLogin no
中设置PasswordAuthentication no
和/etc/ssh/sshd_config
。然后我会做service sshd restart
。这将停止ssh连接,因为ansible已使用root帐户登录到服务器。
我的问题是:如何将ansible ssh放入root帐户,创建常规用户帐户,设置PermitRootLogin no
和PasswordAuthentication no
,然后使用常规用户帐户ssh进入服务器并执行剩下的设置任务?
我的设置过程完全有可能存在缺陷。我会很感激的建议。
答案 0 :(得分:1)
您可以使用Ansible实际管理整个设置过程,而无需手动配置先决条件。
有趣的是,您可以使用ansible_user
动态更改ansible_password
和set_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...
。
因此,您的设置手册可能类似于:
authorized_keys
set_fact
切换到该帐户的其余部分(请记住在此之后的任务中使用become: true
,因为您已从root用户切换到普通用户。您甚至可以尝试执行锁定root之前的测试sudo命令)kill -HUP
<sshd_pid>
ansible_user
设置回root来验证,如果登录失败则验证答案 1 :(得分:0)
您可能只想创建一个标准用户帐户并将其添加到sudoers。然后,您可以使用标准用户运行ansible,如果需要以root
运行命令,则只需使用sudo
命令作为前缀。
我写了一篇关于设置部署用户的文章 http://www.altmake.com/2013/03/06/secure-lamp-setup-on-amazon-linux-ami/