网站搜索

如何配置 Ansible 托管节点并运行临时命令 - 第 3 部分


在本 Ansible 系列的前两篇文章中,我们解释了 Ansible 的核心组件和设置 Ansible 控制节点。在第 3 部分中,我们将演示如何配置 Ansible 受管节点以在远程主机上运行临时命令。

为 Ansible 受管节点设置无密码 SSH 身份验证

回顾我们上一个主题,使用 Ansible 管理远程主机需要在 Ansible 控制节点和托管主机之间设置无密码 SSH 身份验证。这涉及在 Ansible 控制节点上生成密钥对(公钥和私钥 SSH 密钥对)并将公钥复制到所有远程主机。这将是前进的关键一步,将使您的工作变得更加轻松。

在受管节点上配置权限提升

当以普通用户身份登录时,您可能需要在受管节点上执行某些需要提升权限或 root 权限的任务。这些任务包括包管理、添加新用户和组以及修改系统配置等等。为此,您需要调用 playbook 中的某些指令,以在远程主机上以特权用户身份运行任务。

变得

Ansible 允许您“成为”受管节点上不同于当前登录用户的另一用户。become:yes 指令提升您的权限并允许您执行以下任务:需要 root 权限,例如安装和更新软件包以及重新启动系统。

考虑一个安装并启动 Apache Web 服务器的 playbook httpd.yml,如下所示:

---
- name: install and start Apache webserver
  hosts: webservers

  tasks:
       - name: install httpd
         yum: name=httpd  state=latest
         become: yes
       - name: check httpd status
         service: name=httpd state=started

become: yes 该指令允许您以 root 用户身份在远程主机上执行命令。

成为用户

您可以用来成为其他用户的另一个指令是 become_user。这允许您在登录时切换到远程主机上的 sudo 用户,而不是您登录的用户。

例如,要在远程上以 howtoing 用户身份运行命令,请使用如图所示的指令。

- name: Run a command as the apache user
  command: somecommand
  become: yes
  become_user: tecmint

成为方法

该指令将覆盖 ansible.cfg 文件中设置的默认方法,该文件通常设置为 sudo。

成为标志

这些用于游戏或任务级别,例如当您需要在 shell 设置为 nologin 时切换到用户时。

例如,

- name: Run a command as nobody
  command: somecommand
  become: true
  become_method: su
  become_user: nobody
  become_flags: '-s /bin/sh'

权限提升中的命令行选项

让我们看一下运行命令时可用于提升权限的一些命令行选项:

  • --ask-become-pass-K – 这会提示您输入尝试连接的远程系统上 sudo 用户的密码。
ansible-playbook myplaybook.yml --ask-become-pass

  • --become-b – 这允许您以 root 用户身份运行任务,而不提示输入密码。
ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER – 它允许您以其他用户身份运行任务。
ansible-playbook myplaybook.yml --become-user=tecmint

使用 Ad-Hoc Ansible 命令验证工作配置

有时,您可能希望在 Ansible 中的远程主机或服务器上执行快速而简单的任务,而不必创建 playbook。在这种情况下,您需要运行临时命令。

什么是临时命令?

ansible 即席命令是一种单行命令,可帮助您以简单而高效的方式执行简单任务,而无需创建 playbook。此类任务包括在主机之间复制文件、重新启动服务器、添加和删除用户以及安装单个软件包。

在本教程中,我们将探讨 Ansible Ad-Hoc 命令的各种应用。我们将使用下面的库存文件进行演示。

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

Adhoc 命令的基本用法

Ansible-Adhoc 命令最基本的用法是 ping 一个主机或一组主机。

ansible -m ping all

在上面的命令中,-m参数是模块选项。 Ping 是临时命令,第二个参数 all 代表清单文件中的所有主机。该命令的输出如下所示:

要 ping 特定的主机组,请将 ‘all’ 参数替换为组名称。在下面的示例中,我们正在测试与 webservers 组下的主机的连接。

ansible -m ping webservers

此外,您可以使用 -a 属性在双引号中指定常规 Linux 命令。例如,要检查远程系统的系统正常运行时间,请运行:

ansible -a "uptime" all

要检查远程主机的磁盘使用情况,请运行。

ansible -a "df -Th" all

有成百上千个模块可以与 Adhoc 命令一起使用。要查看模块的完整列表及其描述,请运行以下命令。

ansible-doc -l

要查看有关特定模块的详细信息,请运行命令。

ansible-doc module_name

例如,要搜索有关 yum 模块 的更多详细信息,请运行:

ansible-doc yum

使用 Ansible 管理包/服务

Ansible 即席命令可用于使用 yumapt 包管理器安装和删除包。

要在清单文件中的 webservers 组下的 CentOS 7 主机上安装 Apache Web 服务器,请运行以下命令:

ansible webservers -m yum -a "name=httpd  state=present"

要验证 Apache Web 服务器的安装,请登录远程客户端并运行。

rpm -qa | grep httpd

要卸载 Apache,只需将状态从存在更改为不存在即可。

ansible webservers -m yum -a "name=httpd  state=absent"

再次确认 httpd 运行已删除。

rpm -qa | grep httpd

据观察,Apache Web 服务器包已被清除。

使用 Ansible 创建用户和组

创建用户时,“用户”模块会派上用场。要在客户端系统 database_server 上创建密码为 redhat 的新用户 james,请发出以下命令。

ansible database_server -m user -a "name=james password=redhat"

要确认新用户的创建,请运行以下命令:

ansible database_servers -a "id james"

要删除用户,请运行以下命令:

ansible database_servers -m user -a "name=james state=absent"

权限提升

如果您以普通用户身份运行 Ansible,Ansible 使用 --become 选项在远程主机中提供权限升级以获取 root 权限,并使用 -k 提示输入密码。

例如,要使用特权选项 –-become 和选项 -K 运行 Ansible 即席命令“netstat -pnltu”,以提示输入root 用户的密码来运行该命令。

ansible webservers -m shell -a 'netstat -pnltu' --become -K

要成为除 root 之外的其他用户,请使用 --become-user 属性。

例如,要在远程主机上以 howtoing 用户身份运行“df -Th”并提示输入密码,请运行:

ansible all -m shell -a 'df -Th' --become-user tecmint -K

收集有关主机系统的事实

事实是指有关系统的详细信息。其中包括有关 IP 地址、系统架构、内存和 CPU 的信息等。

要检索有关远程主机的信息,请运行以下命令:

ansible all -m setup 

文件传输/复制文件

Ansible 使用模块 copy 将文件从 Ansible 控件安全地复制到多个远程主机。

下面是复制操作的示例:

ansible webservers -m copy -a "src=/var/log/secure dest=/tmp/"

该命令将 Ansible 控制节点中的 /var/log/secure 文件复制到 /tmp 目标中 Webservers 组中的远程主机。

您可以使用文件模块来更改权限和文件所有权。

ansible webservers -m file -a "dest=/tmp/secure mode=600"

此外,您可以附加所有者和组参数,如下所示:

ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=tecmint group=tecmint"

您还可以使用与 mkdir -p 类似的方式创建目录,如图所示。

ansible webservers -m file -a "dest=/path/to/directory mode=755 owner=tecmint group=tecmint state=directory"

例如,

ansible webservers -m file -a "dest=/home/tecmint/data mode=755 owner=tecmint group=tecmint state=directory"

结论

在本文中,我们将阐明如何配置受管节点来运行 Ansible 即席命令来管理远程主机。我们希望您发现它很有用。尝试一下,让我们知道进展如何。