ansible 切换用户建立ssh连接并使用sudo 权限执行程序
来源:互联网 发布:使用excel制作数据库 编辑:程序博客网 时间:2024/05/17 22:44
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)?
/etc/ansible/ansible.cfg。在该文件中添加如下语句即可。
host_key_checking = False
- ansible 切换用户建立ssh连接并使用sudo 权限执行程序
- 非root用户执行程序---sudo的使用
- ssh server连接手机,并切换到root用户
- Linux用户建立,用户sudo权限,用户下添加环境变量
- linux创建用户并授予sudo权限
- linux 添加用户 并赋予sudo权限
- Ubuntu添加用户并赋予sudo权限
- Ubuntu - 添加用户并添加sudo权限
- Ubuntu添加用户并赋sudo权限
- linux增加用户并赋予sudo权限
- Gentoo添加用户并配置sudo权限
- ubuntu添加用户并赋予sudo权限
- pexpect使用ssh登陆linux并切换到root用户
- 亚马逊EC2建立虚拟机并使用ssh连接
- huazi用户没有权限使用sudo命令以root身份执行命令 解决方法
- 使用sudo对用户进行权限管理
- java使用ssh连接Linux并执行命令
- JAVA使用JSch进行SSH连接Linux并执行命令
- 为什么在vs 中用include<iostream.h>不行,而include<stdio.h>可用
- 苏嵌26 16.12.03
- 51nod-1262 扔球(欧拉函数)
- 数据结构(关于串的KMP匹配算法及其改进)
- 关于Xutils框架出现无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase解决方案
- ansible 切换用户建立ssh连接并使用sudo 权限执行程序
- poj_1260 Pearls(dp)
- 哈尔滨理工大学软件学院ACM程序设计全国邀请赛(网络同步赛)L Lucky Number By Assassin 杀人的模拟题
- 16哈理工新生赛 A 棋盘村 (dp)
- 安装mysql提示This application requires .NET framework 4.0.
- HDU 3376 Matrix Again (最小费用最大流)
- js动态生成的标签,点击传递参数到js函数
- 安卓中的AsyncTask(异步任务) (下)
- 浅拷贝与深拷贝