如何配置 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 即席命令可用于使用 yum 和 apt 包管理器安装和删除包。
要在清单文件中的 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 即席命令来管理远程主机。我们希望您发现它很有用。尝试一下,让我们知道进展如何。