设置新用户和SSH密钥验证。在Ubuntu 18.04上使用Ansible

设置新用户和SSH密钥验证。 在Ubuntu 18.04上使用Ansible

Ansible是一款简单的自动化工具,可以自动执行软件应用程序部署,云配置和配置管理。 它是一种服务器协调工具,可帮助您从单个称为“控制机器”的位置管理和控制大量服务器节点。 Ansible由Michael DeHaan于2012年创建,用Python和Powershell编写。

在本教程中,我们将学习如何部署新用户并使用自动化工具Ansible启用基于SSH密钥的身份验证。 我们还将学习如何配置Ansible的“控制机器”,以及如何编写简单易行的剧本。

先决条件

  • 2个或更多的Ubuntu 18.04服务器
    • 10.0.15.10控制机器
    • 10.0.15.21 ansi01
    • 10.0.15.22 ansi02
  • 根特权

我们将要做什么?

  1. 安装Ansible控制机器
  2. 定义用户和SSH密钥
  3. 创建库存文件
  4. 创建Ansible Playbook
  5. 使用Playbook部署服务器
  6. 测试

第1步 - 安装Ansible控制机器

在本教程中,我们将使用Ubuntu 16.04服务器作为Ansible的“机器控制”和主持人。 我们需要做的第一步是设置“控制机器”。

我们将通过运行以下命令在安全的“控制机器”上安装python和ansible。

sudo apt install python ansible -y

安装完成后,我们将添加一个新的系统用户。

我们将添加一个名为'provision'的新用户,以便使用Ansible执行服务器配置。

添加新用户'规定'并给用户一个密码。

useradd -m -s /bin/bash provision
passwd provision

现在使用下面的命令通过在'/etc/sudoers.d/'下创建新的配置文件来为没有密码的sudo添加'provision'用户。

echo  -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision

新用户已创建,现在可以使用sudo而无需密码。

第2步 - 定义用户和SSH密钥

在这一步中,我们将为用户定义合适的主机。 这个用户将被自动创建,所以我们只需要定义用户名,密码和ssh公钥。

对于每个服务器('ansi01'和'ansi02'),我们将创建一个名为'provision'的新用户,其密码为'secret01'。 我们需要使用mkpasswd命令加密'secret01'密码。

使用下面的命令加密'secret01'密码。

mkpasswd --method=SHA-512
TYPE THE PASSWORD 'secret01'

注意:

确保系统上安装了“whois”软件包,或者可以使用以下命令进行安装。

sudo apt install whois -y

你将得到SHA-512加密密码。

接下来,我们将生成一个新的ssh密钥。

登录到'provision'用户并使用ssh-keygen命令生成ssh密钥。

su - provision
ssh-keygen -t rsa

现在已经定义了用户和密码,并且已经创建了ssh密钥(位于'.ssh'目录)。

第3步 - 创建新的清单

在这一步中,我们将定义所有服务器主机的清单文件。

以'provision'用户身份登录并为该项目创建一个新目录。

su - provision
mkdir -p ansible01/

转到'ansible01'目录,使用vim创建一个新的库存文件'inventory.ini'。

cd ansible01/
vim inventory.ini

在那里粘贴以下配置。

[webserver]
ansi01 ansible_host=10.0.15.21
ansi02 ansible_host=10.0.15.22

保存并退出。

现在创建一个新的安全配置文件'ansible.cfg'。

vim ansible.cfg

在那里粘贴以下配置。

[defaults]
inventory = /home/provision/ansible01/inventory.ini

保存并退出。

可靠的库存文件已创建,我们的可用脚本将位于'provision'用户下的'ansible01'目录内。

第4步 - 创建Ansible Playbook

Ansible Playbook是您发送的一组或一组服务器主机上运行的指令集。 它代表了可靠的供应,其中自动化被定义为任务,而所有的工作,如安装软件包,编辑文件,都将由可负责的模块完成。

在这一步中,我们将创建一个新的可靠剧本来部署新用户,部署ssh密钥并配置ssh服务。

在我们创建一个新的剧本之前,我们将使用ssh-keyscan命令扫描所有的服务器指纹,如下所示。

ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts
ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hosts

这些服务器的指纹将存储在'.ssh / known_hosts'文件中。

注意:

如果您有很多服务器节点,则可以保存主机列表,然后使用bash脚本手动扫描ssh密钥指纹,如下所示。

for i in $(cat list-hosts.txt)
do
ssh-keyscan $i >> ~/.ssh/known_hosts
done

接下来,使用vim创建一个名为'deploy-ssh.yml'的可靠剧本。

vim deploy-ssh.yml

在那里粘贴可靠的剧本。

---
- hosts: all
  vars:
    - provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0'
  gather_facts: no
  remote_user: root

  tasks:

  - name: Add a new user named provision
    user:
         name=provision
         password={{ provision_password }}

  - name: Add provision user to the sudoers
    copy:
         dest: "/etc/sudoers.d/provision"
         content: "provision  ALL=(ALL)  NOPASSWD: ALL"

  - name: Deploy SSH Key
    authorized_key: user=provision
                    key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"
                    state=present

  - name: Disable Password Authentication
    lineinfile:
          dest=/etc/ssh/sshd_config
          regexp='^PasswordAuthentication'
          line="PasswordAuthentication no"
          state=present
          backup=yes
    notify:
      - restart ssh

  - name: Disable Root Login
    lineinfile:
          dest=/etc/ssh/sshd_config
          regexp='^PermitRootLogin'
          line="PermitRootLogin no"
          state=present
          backup=yes
    notify:
      - restart ssh

  handlers:
  - name: restart ssh
    service:
      name=sshd
      state=restarted

保存并退出。

在剧本脚本中:

  • 我们创建'deploy-ssh.yml'剧本脚本以应用于'inventory.ini'文件中定义的所有服务器上。
  • 我们创建了一个有效的变量'provision_password',其中包含新用户的加密密码。
  • 将Ansible事实设置为“否”。
  • 将“root”用户定义为远程用户以执行任务自动化。
  • 我们为添加新用户创建新任务,将用户添加到sudoers,并上传ssh密钥。
  • 我们为配置ssh服务创建新任务,禁用root登录并禁用密码验证。 配置ssh的任务将触发'restart ssh'处理程序。
  • 我们创建一个处理程序来重新启动ssh服务。

第5步 - 运行Playbook

登录到'provision'用户并转到'ansible01'目录。

su - provision
cd ansible01/

现在使用下面的命令运行'deploy-ssh.yml'剧本。

ansible-playbook deploy-ssh.yml --ask-pass

输入您的root密码,您将得到如下结果。

所有部署新用户和ssh密钥的任务都已成功完成。

第6步 - 测试

使用可靠的命令进行测试。

ansible webserver -m ping
ansible webserver -m shell -a id

现在你会看到下面的绿色信息。

现在我们可以使用Ansible管理那些'ansi01'和'ansi02'服务器,'provision'用户将成为Ansible的默认用户。

测试与服务器的连接

ssh 10.0.15.21
ssh 10.0.15.22

并且您将使用默认密钥“.ssh / id_rsa”文件并使用用户“规定”连接到每个服务器。

使用ansible部署新用户和ssh-key已成功完成。

参考

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏