设为首页 收藏本站
查看: 1086|回复: 0

[经验分享] ansible普通用户su切换问题

[复制链接]

尚未签到

发表于 2018-1-2 12:35:02 | 显示全部楼层 |阅读模式
  在现网应用中,安全加固后的主机是不允许直接以root用户登陆的,而很多命令又需要root用户来执行,在不改造现网的情况下。希望通过一个普通用户先登陆,再su切到root执行。而且每台主机的普通用户和root用户的密码又不同。希望在通过ansible执行的时候不需要交互输入密码,而是直接执行后输出结果。
一、ansible hosts配置文件
  在之前的系列文章中我们提到,可以把密码写到hosts配置文件,通过查询官网的相关信息了解了,其除了ansible_ssh_user、ansible_ssh_pass变量外,还为su切换提供了ansible_su_pass变量,通过该变量我们可以把root密码直接写到配置文件中。具体如下:

  • [iyunv@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切换执行
  所以结合上面两块,我们做下简单的测试:

  • [iyunv@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配置文件,如下:

  • [iyunv@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执行的内容
  功能实现了,最后要说的是,由于该配置文件中涉及到多台主机的用户名密码,所以该文件的安全工作一定要做好。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430791-1-1.html 上篇帖子: Ansible基础 下篇帖子: Ansible 基础
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表