在本教程中,我们将介绍如何使用Ansible作为CM工具来设置一个基本的访问和服务器硬件工具和设置的CentOS,Debian和Ubuntu服务器。
我们的目标:
- 设置非root用户
- 给新用户sudo访问
- 禁用基于密码的登录
- 禁用
要求:
运行我们的任何操作系统选项的新配置或重建服务器 – CentOS,Debian或Ubuntu。
步骤1:在本地机器上安装可执行文件
在开始编写可执行的手册之前,您需要将其安装在本地机器上。有各种平台的安装说明,包括各种* nix发行版和OS X.
步骤2:编辑可安装的主机文件
为了使Ansible连接到VPS,您需要在Ansible的hosts文件中指定其IP地址。在Linux和OS X机器上可以找到/etc/ansible/hosts。文件的开头应该是这样的。
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
# - Comments begin with the '#' character
# - Blank lines are ignored
# - Groups of hosts are delimited by [header] elements
# - You can enter hostnames or ip addresses
# - A hostname/ip can be a member of multiple groups
# Ex 1: Ungrouped hosts, specify before any group headers.
green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10
要启用您的服务器,只需将IP地址添加到此文件中的任何位置,即[ssdnodes]分组。应该没有其他符号,如#评论一样。
[ssdnodes]
123.45.67.89
现在,通过ping你的服务器测试你的配置。现在,您必须使用它-u root来确保您尝试通过root帐户进行连接。
$ ansible all -m ping -u root
如果成功,您将看到以下输出:
123.45.67.89 | SUCCESS => {
"changed": false,
"ping": "pong"
}
步骤3:创建一个基本的可复制的剧本
为了使上述任何一个目标成为现实,我们需要创建一个可靠的手册来定义我们需要完成的任务。The Ansible playbook是一种通用.yaml语言。
$ mkdir ansible && cd ansible
$ touch create_user.yaml
$ nano create_user.yaml
这是一个完成我们目标的基本手册。注意:本手册旨在在裸机CentOS 7服务器上运行。如果要在Ubuntu / Debian服务器上运行,只需更改yum行apt。
---
- hosts: ssdnodes
remote_user: root
vars_prompt:
- name: "user_name"
prompt: "Enter a name for the new user"
private: no
confirm: yes
- name: "user_password"
prompt: "Enter a password for the new user"
private: yes
encrypt: "sha512_crypt"
confirm: yes
salt_size: 7
tasks:
- name: Check to make sure we have a 'wheel' group
group:
name: wheel
state: present
- name: Install the 'sudo' package
yum:
name: sudo
state: latest
- name: Create the non-root user
user:
name: ""
password: ""
shell: "/bin/bash"
groups: "wheel"
- name: Add local public key for key-based SSH authentication
authorized_key:
user: ""
key: "{{item}}"
with_file:
- ~/.ssh/id_rsa.pub
- name: Restrict root SSH logins
lineinfile:
dest: /etc/ssh/sshd_config
state: present
regexp: '^#PermitRootLogin'
line: 'PermitRootLogin no'
- name: Restrict SSH logins to keys only
lineinfile:
dest: /etc/ssh/sshd_config
state: present
regexp: '^#PasswordAuthentication'
line: 'PasswordAuthentication no'
- name: Restart sshd
systemd:
state: restarted
daemon_reload: yes
name: sshd
在我们介绍你如何运行这个命令之前,让我们来看一下这些行在实践中所做的一切。
- hosts: ssdnodes
remote_user: root
这两行决定了我们将要使用的主机组 – 在这种情况下,ssdnodes我们之前创建的组,并指定我们正在使用根登录(只需一次)来完成我们的步骤。
vars_prompt:
- name: "user_name"
prompt: "Enter a name for the new user"
private: no
confirm: yes
- name: "user_password"
prompt: "Enter a password for the new user"
private: yes
encrypt: "sha512_crypt"
confirm: yes
salt_size: 7
这两个vars_prompt命令将要求用户输入来定义他们想要与新创建的帐户相关联的用户名和密码。
除此之外,开始的每个嵌套的脚本块都- name:定义了一个新任务,一旦先前的任务成功完成,Ansys将按顺序完成。失败的任务将导致整个剧本停止运行。如果您遵循每项任务,您可以看到我们正在安装sudo,创建新用户,将SSH公钥添加到服务器,并sshd在重新启动之前对其进行了一些基本限制。
步骤4:运行可执行的剧本
运行这本剧本是相当简单的。这是我们将要使用的命令:
ansible-playbook create_user.yaml --ask-pass
我们需要包括,–ask-pass以便Ansible使用密码登录服务器,而不是尝试使用不在那里的SSH密钥。
一旦你运行命令,你将被要求输入SSH password:。这是您的服务器的根登录名,该密码可以在会在您的服务器交付时发给您。
输入root密码后,系统将提示您指定并确认用户名和密码。一旦完成,Ansible将会工作!
Ansible如果运行顺利,您的终端中看到以下内容:
____________
< PLAY RECAP >
------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
123.45.67.89 : ok=8 changed=6 unreachable=0 failed=0
这里不能发太多空格,效果如下图。
此时,您可以使用SSH密钥登录到新用户帐户。恭喜!您现在可以轻松开始配置新服务器,并着眼于安全。有关如何深入了解可自动化服务器强化的更多信息,请查看以下这些资源:
《“教程:服务器的入门和可配置管理”》 有 1 条评论
[…] 在我们最后的可以安全的教程中,我们介绍了Ansible的配置管理方法的基础知识,可以帮助您更快地设置新的服务器并提供更高的可靠性。我们在那里创建的可靠的手册是相当基本的,所以我认为是时候建立一个更复杂的手册,支持更多的安全性,而不是牺牲通过通常的方式访问服务器。 […]