一、应用场景
1.linux机器都禁止使用root远程登陆,需要ansible来实现切换用户文件分发。
二、实验步骤
1、配置资源清单hosts文件
[root@master playbook]# cat /etc/ansible/hosts
[test_su]
192.168.1.232 ansible_ssh_user=saas ansible_ssh_pass='xE#bH2bmot3sz' ansible_become_pass='9Cg6Rxjlvtfx^'
192.168.1.233 ansible_ssh_user=saas ansible_ssh_pass='xE#bH2bmot3sz' ansible_become_pass='9Cg6Rxjlvtfx^'
- 注意:
- 密码部分要加单引号
- 在2.5版本,变量也做了变化,ansible_become_pass替换了之前的ansible_sudo_pass or ansible_su_pass
- Ansible普通用户sudo执行指令需要sshpass,使用过程中发现sshpass和synchronize模块冲突,可以使用copy模块代替。
2、Ansile客户端禁止root直接远程登陆,并创建普通用户saas
[root@master playbook]# grep -i “^PermitRootLogin” /etc/ssh/sshd_config
PermitRootLogin no
[root@master playbook]# systemctl restart sshd
3、Ansible服务端分发文件
[root@master playbook]# ansible test_su -S -R root -m copy -a “src=/etc/hosts dest=/etc/hosts”
4.Ansible普通用户sudo执行指令
[root@master playbook]# ansible test_su -S -R root -m shell “whoami”
5.参数解读
-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)
-R后面紧跟用户名,-S可以在前也可以在后。
到此,在客户端的messages日志里可以看到相关信息
6.这里需要注意,普通用户的家目录是要存在,并切该普通用户要有写的权限的,否则会出现认证失败报错,如果这个普通用户没有家目录或者家目录没有写权限在不修改远端主机也有办法可以搞定,修改ansible主机的ansible.cfg配置文件.
[root@master playbook]# vim /etc/ansible/ansible.cfg
[defaults]
# some basic default values...
#inventory = /etc/ansible/hosts
#library = /usr/share/my_modules/
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp #默认在家目录下
remote_tmp = /tmp/.ansible/tmp #改成tmp目录
#local_tmp = ~/.ansible/tmp
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5
#poll_interval = 15
#sudo_user = root
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22
#module_lang = C
#module_set_locale = False
#tmp目录一般都有写的权限,改成临时目录为/tmp下即可