在现网应用中,安全加固后的主机是不允许直接以root用户登陆的,而很多命令又需要root用户来执行,在不改造现网的情况下。希望通过一个普通用户先登陆,再su切到root执行。而且每台主机的普通用户和root用户的密码又不同。希望在通过ansible执行的时候不需要交互输入密码,而是直接执行后输出结果。

一、ansible hosts配置文件

在之前的系列文章中我们提到,可以把密码写到hosts配置文件,通过查询官网的相关信息了解了,其除了ansible_ssh_user、ansible_ssh_pass变量外,还为su切换提供了ansible_su_pass变量,通过该变量我们可以把root密码直接写到配置文件中。具体如下:

  1. [root@361way.com ~]# cat /etc/ansible/hosts
  2. [test01]
  3. 10.212.52.14 ansible_ssh_user=test ansible_ssh_pass=111111 ansible_su_pass=*I2145
  4. 10.212.52.16 ansible_ssh_user=test ansible_ssh_pass=xyz123 ansible_su_pass=mn1Pokm
  5. 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查看时,会看到如下条目:

  1. -S, --su run operations with su (deprecated, use become)
  2. -R SU_USER, --su-user=SU_USER
  3. run operations with su as this user (default=root)
  4. (deprecated, use become)

三、su切换执行

所以结合上面两块,我们做下简单的测试:

  1. [root@361way.com ~]# ansible all -S -R root -m shell -a "uptime"
  2. 10.212.52.252 | success | rc=0 >>
  3. 16:13pm up 34 days 5:40, 2 users, load average: 0.08, 0.21, 0.30
  4. 10.212.52.16 | success | rc=0 >>
  5. 16:26pm up 538 days 23:17, 2 users, load average: 0.00, 0.01, 0.05
  6. 10.212.52.14 | success | rc=0 >>
  7. 16:24pm up 538 days 22:39, 2 users, load average: 0.00, 0.01, 0.05

这里需要注意的是,普通用户的家目录是要存在,并切该普通用户要有写的权限的,不然会出现类似如下的报错:

  1. 10.212.52.252 | FAILED => Authentication or permission failure.
  2. In some cases, you may have been able to authenticate and did not have permissions on the remote directory.
  3. Consider changing the remote temp path in ansible.cfg to a path rooted in "/tmp".
  4. Failed command was: mkdir -p $HOME/.ansible/tmp/ansible-tmp-1449456070.96-212322517029279 && echo $HOME/.ansible/tmp/ansible-tmp-1449456070.96-212322517029279,
  5. exited with result 1: mkdir: cannot create directory `/home/amos/.ansible': Permission denied

当然,如果这个普通用户没有家目录或者家目录没有写权限在不修改远端主机也有办法可以搞定,修改ansible主机的ansible.cfg配置文件,如下:

  1. [root@361way.com ~]# vim /etc/ansible/ansible.cfg
  2. 找到如下行:
  3. remote_tmp = $HOME/.ansible/tmp
  4. 修改为
  5. remote_tmp = /tmp/.ansible/tmp

tmp目录一般都有写的权限吧,改成临时目录为/tmp下即可。

再下为我们再看看远程主机的message日志文件确认下是否真的是通过普通用户切换的:

  1. Dec 3 11:36:20 linux su: (to root) test on /dev/pts/1 //由普通用户test切换为su切换为root的日志
  2. 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切换问题的更多相关文章

  1. ansible普通用户su切换

    [root@361way.com ~]# cat /etc/ansible/hosts [test01] 10.212.52.14 ansible_ssh_user=test ansible_ssh_ ...

  2. Linux 使用 su 切换用户提示 Authentication Failure 的解决方法

    Ubuntu v14.04,使用 su 命令切换用户时报验证失败的错误 这个问题产生的原因是由于 ubuntu 系统默认是没有激活 root 用户的,需要我们手工进行操作,在命令行界面下,或者在终端中 ...

  3. 【Linux安全】防止任意用户使用 su 切换到 root

    防止任意用户使用 su 切换到 root 在终端中输入下列命令 vim /etc/pam.d/su (按 i 进行编辑,qw 保存并推出) 在头部加入行: auth required pam_whee ...

  4. Linux 普通用户su命令切换控制

    1.编辑配置文件/etc/pam.d/su .将下面配置文件"#“去掉: # auth           required        pam_wheel.so use_uid 改成 a ...

  5. linux使用su切换用户提示 Authentication failure的解决方法& 复制文件时,报cp: omitting directory `XXX'

    linux使用su切换用户提示 Authentication failure的解决方法:这个问题产生的原因是由于ubtun系统默认是没有激活root用户的,需要我们手工进行操作,在命令行界面下,或者在 ...

  6. su 切换用户

    大部分Linux发行版的默认账户是普通账户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linux中切换用户的命令是su或su - 前者只是切换ro ...

  7. su 切换用户的提示"This account is currently not available"

    su 切换ivalue用户时,提示"This account is currently not available"; 首先进入/etc/passwd文件中是否添加ivalue用户 ...

  8. Linux基础命令---切换用户su

    su 临时切换身份到另外一个用户,使用su切换用户之后,不会改变当前的工作目录,但是会改变一些环境变量. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUS ...

  9. ubuntu使用su切换root用户提示“认证失败”

    在虚拟机上安装了ubuntu,安装时提示设置密码,也设置了,但是在终端操作时,遇到权限不够的问题,于是就想到就是要切换root用户,获取最高权限. 当我使用 su 切换到root用户时,提示我输入密码 ...

随机推荐

  1. .Net 异步调用

    .NET异步编程之新利器——Task与Await.Async   一.  FrameWork 4.0之前的线程世界    在.NET FrameWork 4.0之前,如果我们使用线程.一般有以下几种方 ...

  2. PHP面试题及答案解析(3)—MySQL数据库

    1.mysql_num_rows()和mysql_affected_rows()的区别. mysql_num_rows()和mysql_affected_rows(),这两个函数都作用于 mysql_ ...

  3. Mac下配置mnmp环境

    虽然比较喜欢玩下新语言, 但是php还是常会用到的. lnmp很多人都听过, 但是不能用在Mac上面, 另外还有个mnpp但在osx 10.8.3下面跑不起来.所以自己手动一步步安装, 整理了方便安装 ...

  4. EularProject 39:给周长推断构成直角三角形个数

    华电北风吹 天津大学认知计算与应用重点实验室 完毕日期:2015/7/30 Integer right triangles Problem 39 If p is the perimeter of a ...

  5. PHPthinking为全部PHP爱好者指路

    1.新手学习路线:个人觉得.自己手上应该有本參考书.像细说PHP,然后看书学习,穿插网上的一些免费视频教程(随便百度一下即可,之后我尽量整理一些给大家).当然假设自控能力差的同学.也能够參加一些培训机 ...

  6. 【Mac系统】之Mysql数据库遇到修改数字密码的问题(SQL语法错误:ERROR 1064 (42000),密码策略等问题:ERROR 1819 (HY000))

    安装完Mysql也进行了第一次初始化密码以及修改密码规则(请参考文章),但是我想后续再改密码,出现了下面几个问题: #SQL语句错误问题 ERROR 1064 (42000): You have an ...

  7. java中什么是bridge method(桥接方法)

    java中什么是bridge method(桥接方法) https://blog.csdn.net/z69183787/article/details/81115524

  8. 数仓interview总结

    一 数据库 1.1 数据库事务特性ACID 原子性Atomicity,一致性Consistency,隔离性Isolation,持续性Durability 1.2 锁有几种,及范围 从数据库系统角度分为 ...

  9. php-fpm重启失败报错

    php-fpm启动命令:/usr/local/php5/sbin/php-fpm 报错:ERROR: unable to bind listening socket for address '127. ...

  10. Lumen开发:lumen源码解读之初始化(1)——app实例

    版权声明:本文为博主原创文章,未经博主允许不得转载. 有些注释来着原文的百度翻译,可以有些难理解或者奇怪,我后面会根据自己的理解做调整的哈!!!不喜勿喷,层主英语不过关... 先来看看入口文件publ ...