如何配置Ansible受管节点和运行临时命令–第3部分

在本文中,我们将演示如何配置Ansible受管节点以在远程主机上运行临时命令。

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

设置对可管理节点的无密码SSH身份验证

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

在受管节点上配置特权升级

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

成为

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

考虑一httpd.yml安装并启动Apache Web服务器的剧本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用户身份在远程主机上执行命令。

成为用户

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

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

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

成为方法

此指令将覆盖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
Ansible成为通行证

Ansible成为通行证

  • --become-b –这使您可以以root用户身份运行任务,而无需提示输入密码。
$ ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER –它允许您以其他用户身份运行任务。
$ ansible-playbook myplaybook.yml --become-user=howtoing
Ansible成为用户

Ansible成为用户

使用临时Ansible命令验证工作配置

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

什么是临时命令?

ansible ad-hoc命令是单行命令,可帮助您以简单而有效的方式执行简单任务,而无需创建剧本。 这些任务包括在主机之间复制文件,重新启动服务器,添加和删除用户以及安装单个软件包。

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

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

Adhoc命令的基本用法

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

# ansible -m ping all

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

Ansible Ping所有主机

Ansible Ping所有主机

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

# ansible -m ping webservers
Ansible Ping主机组

Ansible Ping主机组

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

# ansible -a "uptime" all
远程主机的Ansible检查正常运行时间

远程主机的Ansible检查正常运行时间

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

# ansible -a "df -Th" all
远程主机的Ansible Check Disk使用情况

远程主机的Ansible Check Disk使用情况

您可以将Adhoc命令使用成百上千的模块。 要查看模块的完整列表及其说明,请运行以下命令。

# ansible-doc -l

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

# ansible-doc module_name

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

# ansible-doc yum
Ansible Check Yum模块

Ansible Check Yum模块

使用Ansible管理软件包/服务

Ansible adhoc命令可用于使用yumapt软件包管理器安装和删除软件包。

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

# ansible webservers -m yum -a "name=httpd  state=present"
Ansible在远程主机上安装Apache

Ansible在远程主机上安装Apache

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

# rpm -qa | grep httpd
确认Apache安装

确认Apache安装

要卸载Apache,只需将状态从present更改为absent即可

# ansible webservers -m yum -a "name=httpd  state=absent"
Ansible删除Apache

Ansible删除Apache

再次确认删除httpd运行。

# rpm -qa | grep httpd
确认删除Apache

确认删除Apache

如所观察到的,Apache Web服务器软件包已被清除。

使用Ansible创建用户和组

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

# ansible database_server -m user -a "name=james password=redhat"
Ansible在远程主机上创建用户

Ansible在远程主机上创建用户

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

# ansible database_servers -a "id james"
Ansible确认用户创建

Ansible确认用户创建

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

# ansible database_servers -m user -a "name=james state=absent"
Ansible删除用户

Ansible删除用户

特权提升

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

例如,要运行具有特权选项– -become和选项-K的Ansible adhoc命令' netstat -pnltu ',提示输入root用户的密码以运行该命令。

$ ansible webservers -m shell -a 'netstat -pnltu' --become -K
Ansible权限提升

Ansible权限提升

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

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

$ ansible all -m shell -a 'df -Th' --become-user howtoing -K
Ansible成为另一个用户

Ansible成为另一个用户

收集有关主机系统的事实

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

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

$ ansible all -m setup 
Ansible Gather系统事实

Ansible Gather系统事实

文件传输/复制文件

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

下面是复制操作的示例:

# ansible webservers -m copy -a "src=/var/log/secure dest=/tmp/"
将文件复制到远程主机

将文件复制到远程主机

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

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

# ansible webservers -m file -a "dest=/tmp/secure mode=600"
Ansible更改文件权限

Ansible更改文件权限

此外,您可以追加owner和group参数,如下所示:

# ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=howtoing group=howtoing"
Ansible追加用户和组属性

Ansible追加用户和组属性

您也可以按照类似于mkdir -p方式创建目录,如图所示。

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

例如,

$ ansible webservers -m file -a "dest=/home/howtoing/data mode=755 owner=howtoing group=howtoing state=directory"
Ansible创建目录

Ansible创建目录

结论

在本文中,我们阐明了如何配置受管节点以运行Ansible ad-hoc命令来管理远程主机。 我们希望您觉得它有用。 试一试,让我们知道它的进展。