设为首页 加入收藏

TOP

管理配置Ansible(三)
2023-07-23 13:37:58 】 浏览:76
Tags:管理配 Ansible
置了SSH密钥对。并且使用ssh-copy-id命令将本地的公钥复制到受管主机中。

升级特权

鉴于安全性和审计原因,Ansible可能需要先以非特权用户身份连接远程主机,然后再通过特权升级获得root用户身份的管理权限。这可以在Ansible配置文件的[privilege_escalation]部分中设置。

要默认启用特权升级,可以在配置文件中设置指令become = true。即使默认为该设置,也可以在运行临时命令或Ansible Playbook时通过各种方式覆盖它。(例如,有时候可能要运行一些不需要特权升级的任务或play。)

become_method指令指定如何升级特权。有多个选项可用,但默认为使用sudo。类似地,become_user指令指定要升级到的用户,但默认为root。

如果所选的become_method机制要求用户输入密码才能升级特权,可以在配置文件中设置become_ask_pass = true指令。

以下示例ansible.cfg文件假设你可以通过基于SSH密钥的身份验证以someuser用户身份连接受管主机,并且someuser可以使用sudo以root用户身份运行命令而不必输入密码:

[defaults]
inventory = ./inventory
remote_user = someuser
ask_pass = false

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false

配置文件注释

Ansible配置文件允许使用两种注释字符:井号或分号。

位于行开头的#号会注释掉整行。它不能和指令位于同一行中。

分号字符可以注释掉所在行中其右侧的所有内容。它可以和指令位于同一行中,只要该指令在其左侧。

运行临时命令

Ansible运行临时命令的语法如下:

ansible host-pattern -m module [-a 'module arguments'] [-i inventory]

host-pattern

参数用于指定在其上运行临时命令的受管主机。它可以是清单中的特定受管主机或主机组。也可以用后面的-i选项指定特定的清单而不使用默认清单。

-m选项将Ansible应在目标主机上运行的module名称作为参数。模块是为了实施任务而执行的小程序。一些模块不需要额外的信息,但其他模块需要使用额外的参数来指定其操作详情。-a选项以带引号字符串形式取这些参数的列表。

一种最简单的临时命令使用ping模块。

此模块不执行ICMP ping,而是检查能否在受管主机上运行基于Python的模块。例如,以下临时命令确定清单中的所有受管主机能否运行标准的模块:

[root@control ~]# ansible all -m ping
192.168.118.130 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
...

使用临时命令通过模块来执行任务

模块是临时命令用于完成任务的工具。Ansible提供了数百个能够完成不同任务的模块。通常我们可以查找一个经过测试的专用模块,作为标准安装的一部分来完成所需的任务。

ansible-doc -l命令可以列出系统上安装的所有模块

可以使用ansible-doc来按照名称查看特定模块的帮助文档,再查找关于模块将取什么参数作为选项的信息。

例如以下命令显示ping模块的帮助文档,在帮助文档里面输入q命令表示退出:

ansible-doc ping

更多的模块信息请访问在线Ansible文档,网址:

Index of all Modules — Ansible Documentation

Ansible常用模块

模块类别 模块
文件模块 copy:将本地文件复制到受管主机
file:设置文件的权限和其他属性
lineinfile:确保特定行是否在文件中
synchronize:使用rsync同步内容
软件包模块 package:使用操作系统本机的自动检测软件包管理器管理软件包
yum:使用yum管理软件包
apt:使用APT管理软件包
dnf:使用dnf管理软件包
gem:管理Ruby gem
pip:从PyPI管理Python软件包
系统模块 firewalld:使用firewalld管理防火墙
reboot:重启计算机
service:管理服务
user:添加、删除和管理用户帐户
Net Tools模块 get_url:通过HTTP、HTTPS或FTP下载文件
nmcli:管理网络
uri:与Web服务交互

大部分模块会取用参数。可在模块的文档中找到可用于该模块的参数列表。临时命令可以通过-a选项向模块传递参数。无需参数时,可从临时命令中省略-a选项。如果需要指定多个参数,请以引号括起的空格分隔列表形式提供。

例如,以下临时命令使用user模块来确保runtime用户存在于172.16.103.129上并且其UID为4000:

[root@control ~]# ansible 192.168.118.130 -m user -a 'name=runtime uid=4000 state=present'
192.168.118.130 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "comment": "",
    "create_home": true,
    "group": 4000,
    "home": "/home/runtime",
    "name": "runtime",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 4000
}
[root@control ~]# ansible 192.168.118.130 -a 'id runtime'
192.168.118.130 | CHANGED | rc=0 >>
uid=4000(runtime) gid=4000(runtime) groups=4000(runtime)

大多数模块为idempotent(幂等:),这表示它们可以安全地多次运行;如果系统已处于正确的状态,它们不会进行任何操作。

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【进程间通信】常用方式汇总 下一篇自动化管理软件与Ansible安装

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目