自动化运维利器(Ansible)二

管理节点与被管理节点建立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是希望被管理节点达到一种状态 如果被管理节点达到一种状态了 他就不会对他进行操作了,比如说控制被管理节点的服务启动 如果启动了他就不会去执行启动服务的命令,如果没有就去执行启动服务的命令,避免了一些资源的浪费

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值