ansible小结(十一)ansible普通用户su切换问题
2016-11-01 18:58
344 查看
在之前我曾总结了一点ansible系列博文,本篇还承接之前的篇幅吧。在现网应用中,安全加固后的主机是不允许直接以root用户登陆的,而很多命令又需要root用户来执行,在不改造现网的情况下。希望通过一个普通用户先登陆,再su切到root执行。而且每台主机的普通用户和root用户的密码又不同。希望在通过ansible执行的时候不需要交互输入密码,而是直接执行后输出结果。
在之前的系列文章中我们提到,可以把密码写到hosts配置文件,通过查询官网的相关信息了解了,其除了ansible_ssh_user、ansible_ssh_pass变量外,还为su切换提供了ansible_su_pass变量,通过该变量我们可以把root密码直接写到配置文件中。具体如下:
[root@361way.com ~]# cat /etc/ansible/hosts
[test01]
10.212.52.14 ansible_ssh_user=test ansible_ssh_pass=111111 ansible_su_pass=*I2145
10.212.52.16 ansible_ssh_user=test ansible_ssh_pass=xyz123 ansible_su_pass=mn1Pokm
10.212.52.252 ansible_ssh_user=amos ansible_ssh_pass=asdf ansible_su_pass=xyzp)okm
注:我测试使用的ansible版本是1.9版的,在新的2.0版本中,变量也做了变化ansible_become_pass替换了之前的ansible_sudo_pass or ansible_su_pass ,具体可以参看官方文档。
在执行ansible -h查看时,会看到如下条目:
-S, --su run operations with su (deprecated, use become)
-R SU_USER, --su-user=SU_USER
run operations with su as this user (default=root)
(deprecated, use become)
所以结合上面两块,我们做下简单的测试:
[root@361way.com ~]# ansible all -S -R root -m shell -a "uptime"
10.212.52.252 | success | rc=0 >>
16:13pm up 34 days 5:40, 2 users, load average: 0.08, 0.21, 0.30
10.212.52.16 | success | rc=0 >>
16:26pm up 538 days 23:17, 2 users, load average: 0.00, 0.01, 0.05
10.212.52.14 | success | rc=0 >>
16:24pm up 538 days 22:39, 2 users, load average: 0.00, 0.01, 0.05
这里需要注意的是,普通用户的家目录是要存在,并切该普通用户要有写的权限的,不然会出现类似如下的报错:
10.212.52.252 | FAILED => Authentication or permission failure.
In some cases, you may have been able to authenticate and did not have permissions on the remote directory.
Consider changing the remote temp path in ansible.cfg to a path rooted in "/tmp".
Failed command was: mkdir -p $HOME/.ansible/tmp/ansible-tmp-1449456070.96-212322517029279 && echo $HOME/.ansible/tmp/ansible-tmp-1449456070.96-212322517029279,
exited with result 1: mkdir: cannot create directory `/home/amos/.ansible': Permission denied
当然,如果这个普通用户没有家目录或者家目录没有写权限在不修改远端主机也有办法可以搞定,修改ansible主机的ansible.cfg配置文件,如下:
[root@361way.com ~]# vim /etc/ansible/ansible.cfg
找到如下行:
remote_tmp = $HOME/.ansible/tmp
修改为
remote_tmp = /tmp/.ansible/tmp
tmp目录一般都有写的权限吧,改成临时目录为/tmp下即可。
再下为我们再看看远程主机的message日志文件确认下是否真的是通过普通用户切换的:
Dec 3 11:36:20 linux su: (to root) test on /dev/pts/1 //由普通用户test切换为su切换为root的日志
Dec 3 11:36:20 linux ansible-command: Invoked with creates=None executable=None chdir=None args=uptime removes=None NO_LOG=None shell=True warn=True //ansible执行的内容
功能实现了,最后要说的是,由于该配置文件中涉及到多台主机的用户名密码,所以该文件的安全工作一定要做好。
一、ansible hosts配置文件
在之前的系列文章中我们提到,可以把密码写到hosts配置文件,通过查询官网的相关信息了解了,其除了ansible_ssh_user、ansible_ssh_pass变量外,还为su切换提供了ansible_su_pass变量,通过该变量我们可以把root密码直接写到配置文件中。具体如下:[root@361way.com ~]# cat /etc/ansible/hosts
[test01]
10.212.52.14 ansible_ssh_user=test ansible_ssh_pass=111111 ansible_su_pass=*I2145
10.212.52.16 ansible_ssh_user=test ansible_ssh_pass=xyz123 ansible_su_pass=mn1Pokm
10.212.52.252 ansible_ssh_user=amos ansible_ssh_pass=asdf ansible_su_pass=xyzp)okm
注:我测试使用的ansible版本是1.9版的,在新的2.0版本中,变量也做了变化ansible_become_pass替换了之前的ansible_sudo_pass or ansible_su_pass ,具体可以参看官方文档。
二、ansible命令参数
在执行ansible -h查看时,会看到如下条目:-S, --su run operations with su (deprecated, use become)
-R SU_USER, --su-user=SU_USER
run operations with su as this user (default=root)
(deprecated, use become)
三、su切换执行
所以结合上面两块,我们做下简单的测试:[root@361way.com ~]# ansible all -S -R root -m shell -a "uptime"
10.212.52.252 | success | rc=0 >>
16:13pm up 34 days 5:40, 2 users, load average: 0.08, 0.21, 0.30
10.212.52.16 | success | rc=0 >>
16:26pm up 538 days 23:17, 2 users, load average: 0.00, 0.01, 0.05
10.212.52.14 | success | rc=0 >>
16:24pm up 538 days 22:39, 2 users, load average: 0.00, 0.01, 0.05
这里需要注意的是,普通用户的家目录是要存在,并切该普通用户要有写的权限的,不然会出现类似如下的报错:
10.212.52.252 | FAILED => Authentication or permission failure.
In some cases, you may have been able to authenticate and did not have permissions on the remote directory.
Consider changing the remote temp path in ansible.cfg to a path rooted in "/tmp".
Failed command was: mkdir -p $HOME/.ansible/tmp/ansible-tmp-1449456070.96-212322517029279 && echo $HOME/.ansible/tmp/ansible-tmp-1449456070.96-212322517029279,
exited with result 1: mkdir: cannot create directory `/home/amos/.ansible': Permission denied
当然,如果这个普通用户没有家目录或者家目录没有写权限在不修改远端主机也有办法可以搞定,修改ansible主机的ansible.cfg配置文件,如下:
[root@361way.com ~]# vim /etc/ansible/ansible.cfg
找到如下行:
remote_tmp = $HOME/.ansible/tmp
修改为
remote_tmp = /tmp/.ansible/tmp
tmp目录一般都有写的权限吧,改成临时目录为/tmp下即可。
再下为我们再看看远程主机的message日志文件确认下是否真的是通过普通用户切换的:
Dec 3 11:36:20 linux su: (to root) test on /dev/pts/1 //由普通用户test切换为su切换为root的日志
Dec 3 11:36:20 linux ansible-command: Invoked with creates=None executable=None chdir=None args=uptime removes=None NO_LOG=None shell=True warn=True //ansible执行的内容
功能实现了,最后要说的是,由于该配置文件中涉及到多台主机的用户名密码,所以该文件的安全工作一定要做好。
相关文章推荐
- ansible普通用户su切换
- Linux环境中普通用户切换到root用户问题
- 普通用户之间无法通过ssh协议进行切换(su),即使输入正确的密码
- AIX下用su切换用户时不能加载环境变量的问题解决
- ansible 普通用户执行root权限 su
- PAM禁止root用户登录,限制普通su切换
- ansible普通用户使用chown改变文件所属人和所属组权限不够问题
- su incorrect password问题 su无法切换用户问题 以及权限s、t、i、a补充
- useradd umask报错 root用su 切换到普通用户提示输入密码并报密码错误
- Ubuntu普通用户下su切换至root提示:”认证失败“
- linux 从普通用户切换为管理员时用 su 命令为什么提示输入密码,按什么键光标都没反应?
- su普通用户切换root用户失败
- Linux系统命令"su - user"在普通用户之间的免密切换
- 无法从普通用户切换到超级用户的问题
- Linux禁止普通用户使用su切换到root用户
- centos7系统root无法通过su切换到某个普通用户
- 禁止普通用户使用su命令切换到root用户
- centos7系统root无法通过su切换到某个普通用户
- centos7系统root无法通过su切换到某个普通用户
- linux 禁止普通用户使用su切换到root用户和禁止 root ssh登陆