<div id="article_content" class="article_content clearfix">
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-211130ba7a.css">
<div id="content_views" class="markdown_views prism-tomorrow-night-eighties">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<h4><a id="_0" target="_blank"></a>一、编写第一条命令</h4>
ansible 192.168.128.83 -m ping
- 1
这条命令的意思是通过管理主机 ping 192.168.128.83
命令中的”-m ping”表示调用 ping 模块。由00节可知,Ansible 有很多模块,包括核心模块和自定义模块,不同的模块可以帮助我们完成不同的工作。我们会根据实际情况使用各种模块,Ansible 基于这些模块完成实际的任务。
如果想要让上述命令正常执行,则必须同时满足两个最基本的条件:
(1)Ansible 所在的管理主机可以通过ssh连接到被管理主机;
(2)被管理主机的IP地址等信息已经添加到 Ansible 的”管理清单(Inventory)”中。
条件(1)是因为 Ansible 不用在管理主机上安装 agent,但是它需要依赖ssh连接到被管理主机。条件(2)表明,即使 Ansible 所在的主机能够通过 ssh 连接到被管理主机,仍然需要将被管理主机的 IP 地址、ssh 端口号等信息添加到一个被称作为”管理清单(Inventory)”的配置文件中,如果对应的主机信息在 Ansible 的”清单”中不存在,那么 Ansible 则无法操作对应主机。
二、执行第一条命令
在01节我们已经安装好 Ansible 了,现在执行这个命令,看看效果:
[root@ansible-manager ~]# ansible 192.168.128.83 -m ping
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.128.83
- 1
- 2
- 3
- 4
警告显示,主机列表是空的。也就是上面说的第二个基本条件没有满足,虽然我们可以从管理节点 ping 通被管理节点,但是 Inventory 里面没有配置这一IP地址,Ansible 就无法正确执行。
下面在把 192.168.128.83 主机和 ssh 验证信息加入到 /etc/ansible/hosts (Inventory 文件的位置)中:
192.168.128.83 ansible_port=22 ansible_user=root ansible_ssh_pass=root
- 1
ansible_port :用于配置被管理主机上的sshd服务端口号,如果是默认的22,则可以省略。
ansible_user :用于配置连接到被管理主机时所使用的用户名称。
ansible_ssh_pass :用于配置被管理主机用户的连接密码。
再试一次,操作成功:
[root@ansible-manager ~]# ansible 192.168.128.83 -m ping
192.168.128.83 | SUCCESS => {
"changed": false,
"ping": "pong"
}
- 1
- 2
- 3
- 4
- 5
Ansible 还支持对主机添加别名,当主机存在别名时,我们可以通过主机的”别名”管理对应主机。
比如,192.168.128.83 这台主机的别名为 ansible-demo3,那么,我们在配置清单时,可以进行如下配置:
ansible-demo3 anible_host=192.168.128.83 ansible_port=22 ansible_user=root ansible_ssh_pass=root
- 1
当为主机配置别名时,主机的IP地址必须使用 anible_host 关键字进行指明,否则 Ansible将无法正确的识别对应的主机。下面使用主机的别名管理对应主机:
[root@ansible-manager ~]# ansible ansible-demo3 -m ping
ansible-demo3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
- 1
- 2
- 3
- 4
- 5
三、配置管理节点免密登陆
为了安全考虑,一般会采用密钥验证方式登录主机。通过证书签名达到 ssh 无密码访问。使用 ssh-keygen 与 ssh-copy-id 来实现快速证书的生成及公钥下发。
[root@ansible-manager ~]# ssh-keygen
...
[root@ansible-manager ~]# ssh-copy-id root@192.168.128.83
......
- 1
- 2
- 3
- 4
既然已经能够免密码创建 ssh 连接,那么在配置”管理清单”时,就没有必要再提供对应主机的用户名和密码了,所以,可以将清单中的配置精简为如下(端口默认为22也可以省略):
ansible-demo3 anible_host=192.168.128.83
- 1
再次执行:
[root@ansible-manager ~]# ansible ansible-demo3 -m ping
ansible-demo3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
- 1
- 2
- 3
- 4
- 5
如果 192.168.128.83 的 hostname 为 ansible-demo3,则清单中的配置更可以精简为:
ansible-demo3
- 1
在后续的示例中,默认使用密钥认证的方式连接到被管理主机。
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
<div data-report-view="{"mod":"popu_387","dest":"https://blog.csdn.net/xie_qi_chao/article/details/105809951","extend1":"pc","ab":"new"}"></div>
<div class="person-messagebox">
<div class="left-message"><a href="https://blog.csdn.net/xie_qi_chao">
<img src="https://profile.csdnimg.cn/B/F/6/3_xie_qi_chao" class="avatar_pic" username="xie_qi_chao">
</a></div>
<div class="middle-message">
<div class="title"><span class="tit "><a href="https://blog.csdn.net/xie_qi_chao" data-report-click="{"mod":"popu_379","ab":"new"}" target="_blank">解启超</a></span>
<!-- 等级,level -->
<img class="identity-icon" src="https://csdnimg.cn/identity/blog5.png"> </div>
<div class="text"><span>原创文章 409</span><span>获赞 75</span><span>访问量 6万+</span></div>
</div>
<div class="right-message">
<a class="btn btn-sm attented bt-button personal-watch" data-report-click="{"mod":"popu_379","ab":"new"}">已关注</a>
<a href="https://im.csdn.net/im/main.html?userName=xie_qi_chao" target="_blank" class="btn btn-sm bt-button personal-letter">私信
</a>
</div>
</div>
</div>
</article>