频道栏目
首页 > 网络 > 云计算 > 正文

ansible切换用户建立ssh连接并使用sudo权限执行程序

2016-12-06 09:33:00         来源:github_36895970的博客  
收藏   我要投稿

Ansible 是一款非常有用的统一集群管理工具,安装简单不需要再被控节点安装客户端。介绍Ansible的文章已经很多了,本文不再对ansible做基础介绍。欢迎拍砖指正。

由于项目需求,需要使用ansible在控制节点以root身份运行playbook,并在playbook中调用其他程序操作/etc下的文件,所以该程序需要使用sudo或者root权限运行。如下图所示:

\

ansible 运行playbook的时候默认首先会以运行程序的用户身份与客户端的对应用户建立连接,本文采用SSH连接。比如以root身份运行 "ansible-playbook test.yml "时,ansible首先会以root身份与客户机的root建立ssh连接。

1.由于本文采用ssh连接,首先需要生成ssh密码,默认保存到运行ssh-keygen的用户主目录中。命令如下:

ssh-keygen
【注:切换到建立ssh连接的用户usera运行: su usera,因为该认证文件只适用于本用户usera与其他用户的ssh连接认证】

2. 拷贝ssh公钥到被控制机器节点。命令如下:

ssh-copy-id -i ~/.ssh/id_rsa.pub usera@xx.xx.xx.xx


3.接下来就可以在root用户的环境中运行之前建好的test.yml文件了。命令如下:

ansible-playbook test.yml --user=usera --private-key=/home/usera/.ssh/id_rsa -s

这里 --user=usera 表示使用usera与被控节点的usera建立ssh连接。--private-key表示ssh使用的认证文件,

-s 表示在连接到被控制机器节点后使用usera 的sudo权限运行test.yml中的命令。

由于需要使用usera的sudo权限,这里需要usera的sudo密码,有2种方式实现,第一:在运行命令中添加--ask-sudo-pass,在命令运行时手动输入sudo的密码;第二:在ansible的配置文件hosts中配置sudo密码,ansible默认的hosts位于/etc/ansible/hosts。本文采用第二种方式。

hosts文件的配置如下所示:

[usera]

192.168.1.108 ansible_sudo_pass='123456'

[userb]

192.168.1.107 ansible_sudo_pass='123456'

【注:ansible 建立连接时默认使用的认证文件是该用户的主目录下的ssh rsa文件,所以当使用其他用户建立ssh连接时需要指定--private-key文件】

运行中的坑:

在拷贝玩ssh文件到被控制主机后,第一次运行会出现检查keys的对话,导致ssh连接失败,如下:

The authenticity of host '192.168.0.5 (192.168.0.5)' can't be established.

ECDSA key fingerprint is 05:51:e5:c4:d4:66:9b:af:5b:c9:ba:e9:e6:a4:2b:fe.

Are you sure you want to continue connecting (yes/no)?

为了确保连接ansible的顺利执行,需要在ansible的配置文件中添加忽略keys检查的配置,ansible的配置文件默认在

/etc/ansible/ansible.cfg。在该文件中添加如下语句即可。

host_key_checking = False

上一篇:基于keystone的swift搭建教程
下一篇:[Hive]Hive安装
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站