在本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
-
--become
,-b
–这使您可以以root用户身份运行任务,而无需提示输入密码。
$ ansible-playbook myplaybook.yml --become
-
--become-user=BECOME_USER
–它允许您以其他用户身份运行任务。
$ ansible-playbook myplaybook.yml --become-user=howtoing
使用临时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命令,第二个参数全部代表清单文件中的所有主机。 命令的输出如下所示:
要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 adhoc命令可用于使用yum和apt软件包管理器安装和删除软件包。
要在清单文件中webservers组下的CentOS 7主机上安装Apache Web服务器,请运行以下命令:
# ansible webservers -m yum -a "name=httpd state=present"
要验证Apache Web服务器的安装,请登录到远程客户端并运行。
# rpm -qa | grep httpd
要卸载Apache,只需将状态从present更改为absent即可 。
# ansible webservers -m yum -a "name=httpd state=absent"
再次确认删除httpd运行。
# rpm -qa | grep httpd
如所观察到的,Apache Web服务器软件包已被清除。
使用Ansible创建用户和组
创建用户时,“ 用户 ”模块会派上用场。 要在客户端系统database_server上使用密码redhat创建新用户jam ,请发出命令。
# 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 adhoc命令’ 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 howtoing -K
收集有关主机系统的事实
事实是指有关系统的详细信息。 其中包括有关IP地址,系统架构,内存和CPU的信息。
要检索有关远程主机的信息,请运行以下命令:
$ ansible all -m setup
文件传输/复制文件
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"
此外,您可以追加owner和group参数,如下所示:
# ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=howtoing group=howtoing"
您也可以按照类似于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 ad-hoc命令来管理远程主机。 我们希望您觉得它有用。 试一试,让我们知道它的进展。