ansible 切换用户建立ssh连接并使用sudo 权限执行程序 - Go语言中文社区

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


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



版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/github_36895970/article/details/53454048
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-09-05 17:24:10
  • 阅读 ( 1274 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢