[TOC]
0x00 入坑出坑
1.Ansible 如何切换用户建立SSH并使用sudo权限执行程序。
描述: 在使用Ansible往往赋予其低权限用户, 假如由于项目需求,需要使用ansible在控制节点以root身份运行playbook,并在playbook中调用其他程序操作/etc下的文件,所以该程序需要使用sudo或者root权限运行,我们应该如何配置。
操作步骤:
代码语言:javascript复制# 1.客户端-生成ssh公密钥
# 【注:切换到建立ssh连接的用户weiyigeek运行: su weiyigeek,因为该认证文件只适用于本用户weiyigeek与其他用户的ssh连接认证】
ssh-keygen
# 2.拷贝ssh公钥到被控制机器节点
ssh-copy-id -i ~/.ssh/id_rsa.pub weiyigeek@xx.xx.xx.xx
# 3.客户端-在root用户的环境中运行之前建好的test.yml文件
ansible-playbook test.yml --user=weiyigeek --private-key=/home/weiyigeek/.ssh/id_rsa -s
# 参数说明:
# --user=weiyigeek 表示使用weiyigeek与被控节点的weiyigeek建立ssh连接。
# --private-key表示ssh使用的认证文件。
# -s 表示在连接到被控制机器节点后使用weiyigeek 的sudo权限运行test.yml中的命令。
温馨提示: ansible 输入 weiyigeek 用户的sudo密码有两种配置方式,一种是在命令行中添加--ask-sudo-pass
, 另外一种则是在ansible的配置文件/etc/ansible/hosts
中配置sudo密码。
# 此处采用第二种方式
[node-1]
192.168.1.108 ansible_user='WeiyiGeek' ansible_sudo_pass='123456'
[node-2]
192.168.1.107 ansible_sudo_pass='123456'
温馨提示: 可能会遇到的问题,在拷贝玩ssh文件到被控制主机后,第一次运行会出现检查keys的对话,导致ssh连接失败,如下所示, 所以为了解决该问题我们可以在ansible的默认配置文件/etc/ansible/ansible.cfg
中, 添加如下语句即可 host_key_checking = False
.
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)?