管理节点与被管理节点建立SSH 信任关系
- 管理节点(ansible)中创建密钥对
[root@lwq.com ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" 非交互式创建密钥
将本地的公钥传输到被管理节点
-
每个被管理节点都需要传递
-
过程中需要被管理节点(这里是 192.66.66.102)的用户名(这里是 root)及密码
-
生成中批量传公钥
[root@lwq.com ~]# ssh-copy-id root@192.66.66.102
[root@lwq.com ~]# ssh-copy-id 'root@192.66.66.102' "ip a" #非交互式执行远端命令
小实验
- 场景假设一
管理节点:
192.66.66.103名 lwq.com
被管理节点(资产):
192.66.66.104
- 且管理节点 和 被管理节点之间的节点已经打通 SSH 信任关系。
一、在管理节点上,测试与所有被管理节点的网络连通性。
- 注意 -i 参数后面接的是一个列表(List)。因此当为一个被管理节点时,我们后面一定要加一个英文逗号(,),告知是List
[root@lwq ~]# ansible all -i 192.66.66.104, -m ping
192.66.66.104 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false, #对方的状态有没有改变false 假的就是没改变 没有创建文件没改变东西
"ping": "pong"
}
-
参数
- all 在 ansible 中, 将其叫做pattern , 即匹配。我通常称它为资产选择器。就是匹配资产(-i 参数指定) 中的一部分。这里的 all 是匹配所有指定的所有资产。将在下面资产部分详细阐述。
- -i 指定Ansible 的资产,也就是被管理服务器。
- -m 指定要运行的模块,比如这里的 ping 模块和 copy 模块
- -a 指定模块的参数, 这里模块 ping 没有指定参数。 模块 copy 指定了 src 和 dest 参数。
-
场景假设二
在管理节点上,确保文件 /tmp/a.conf 发布到所有被管理节点
touch /tmp/a.conf
#拷贝一个文件 拷贝一个管理节点的文件到被管理节点 copy 模块
ansible all -i 192.66.66.103, -m copy -a “src=/tmp/a.conf dest=/tmp/a.conf”
[root@lwq ~]# ansible all -i 192.66.66.104, -m copy -a "src=/tmp/a.txt dest=/tmp/a.txt"
192.66.66.104 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/a.txt",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1616206204.59-7425-9904890411512/source",
"state": "file",
"uid": 0
}
再执行一次
[root@lwq ~]# ansible all -i 192.66.66.104, -m copy -a "src=/tmp/a.txt dest=/tmp/a.txt"
192.66.66.104 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false, #这里因为文件已经存在了所有没有发生改变
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/a.txt",
"gid": 0,
"group": "root",
"mode": "0644", #文件权限
"owner": "root",
"path": "/tmp/a.txt",
"size": 0,
"state": "file",
"uid": 0
}
这里总结一下:
ansible是希望被管理节点达到一种状态 如果被管理节点达到一种状态了 他就不会对他进行操作了,比如说控制被管理节点的服务启动 如果启动了他就不会去执行启动服务的命令,如果没有就去执行启动服务的命令,避免了一些资源的浪费