最近公司将linux机器都禁止使用root直接远程登陆,而机器上项目都是在root下创建的,平时都是通过一台linux机器通过scp分发文件到多台linux机器,这样一来,就无法直接使用scp来分发文件,于是,我们用到了ansible来实现文件分发。

环境:
Ansible服务端操作系统:CentOS Linux release 7.5.1804 (Core)
Ansible服务端Ansible版本:ansible 2.5.3
Ansible服务器IP:192.168.100.127
Ansible客户端操作系统:CentOS Linux release 7.3.1611 (Core)
CentOS Linux release 7.2.1511 (Core)
Ansible客户端IP:10.15.43.164 10.15.43.238

ansible没有服务端和客户端,这里为了便于区分写成了服务端和客户端。

实验目的
通过Ansible服务端将文件zabbix_discovery_port.sh分发Ansible的2个客户端/app/ansible目录

实验步骤
1、配置资源清单inventory文件

[root@Super ~]# tail -5 /etc/ansible/hosts ## db-[99:101]-node.example.com
[test]
10.15.43.164 ansible_ssh_port=22 ansible_ssh_user=justin ansible_ssh_pass='51cto' ansible_become_pass='123456'
10.15.43.238 ansible_ssh_port=22 ansible_ssh_user=justin ansible_ssh_pass='51cto' ansible_become_pass='123456'
[root@Super ~]#

在2.5版本,变量也做了变化,ansible_become_pass替换了之前的ansible_sudo_pass or ansible_su_pass

2、Ansile客户端禁止root直接远程登陆,并创建普通用户ywbz

[root@host164 ~]# grep -i "^PermitRootLogin" /etc/ssh/sshd_config
PermitRootLogin no
[root@host164 ~]# systemctl restart sshd
[root@host164 ~]# useradd ywbz
[root@host164 ~]# echo 'csdp' | passwd --stdin ywbz
Changing password for user ywbz.
passwd: all authentication tokens updated successfully.
[root@host164 ~]# 

3、Ansible服务端分发文件

[root@Super ~]# ansible test -S -R root -m shell -a 'ls -l /app/ansible'
10.15.43.238 | SUCCESS | rc=0 >>
total 010.15.43.164 | SUCCESS | rc=0 >>
total 0[root@Super ~]# ansible test -S -R root -m copy -a 'src=/app/scripts/remote-excet/zabbix_discovery_port.sh dest=/app/ansible/'
10.15.43.238 | SUCCESS => {"changed": true, "checksum": "824760fb7b2c5852a4bbffb77a57ef41d1880497", "dest": "/app/ansible/zabbix_discovery_port.sh", "gid": 0, "group": "root", "md5sum": "c66dd03749ee77696adb915e2dd8da4a", "mode": "0664", "owner": "root", "size": 935, "src": "/home/ywbz/.ansible/tmp/ansible-tmp-1529501925.71-156669741008262/source", "state": "file", "uid": 0
}
10.15.43.164 | SUCCESS => {"changed": true, "checksum": "824760fb7b2c5852a4bbffb77a57ef41d1880497", "dest": "/app/ansible/zabbix_discovery_port.sh", "gid": 0, "group": "root", "md5sum": "c66dd03749ee77696adb915e2dd8da4a", "mode": "0664", "owner": "root", "secontext": "system_u:object_r:default_t:s0", "size": 935, "src": "/home/ywbz/.ansible/tmp/ansible-tmp-1529501925.77-183701352629116/source", "state": "file", "uid": 0
}
[root@Super ~]# ansible test -S -R root -m shell -a 'ls -l /app/ansible'
10.15.43.238 | SUCCESS | rc=0 >>
total 4
-rw-rw-r-- 1 root root 935 Jun 20 21:38 zabbix_discovery_port.sh10.15.43.164 | SUCCESS | rc=0 >>
total 4
-rw-rw-r--. 1 root root 935 Jun 21 05:38 zabbix_discovery_port.sh[root@Super ~]#


-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日志里可以看到相关信息

[root@host238 ~]# tail -5000f /var/log/messages
Jun 20 21:53:40 host238 systemd: Created slice User Slice of ywbz.
Jun 20 21:53:40 host238 systemd: Starting User Slice of ywbz.
Jun 20 21:53:40 host238 systemd: Started Session 191 of user ywbz.
Jun 20 21:53:40 host238 systemd-logind: New session 191 of user ywbz.
Jun 20 21:53:40 host238 systemd: Starting Session 191 of user ywbz.
Jun 20 21:53:40 host238 su: (to root) ywbz on pts/1  #由普通用户test切换为su切换为root的日志
Jun 20 21:53:41 host238 ansible-stat: Invoked with checksum_algorithm=sha1 get_checksum=True follow=False checksum_algo=sha1 path=/app/ansible/zabbix_discovery_port.sh get_md5=None get_mime=True get_attributes=True   #ansible执行的内容功能实现了

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

10.15.43.164 | UNREACHABLE! => {"changed": false, "msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"` echo /home/ywbz/.ansible/tmp/ansible-tmp-1529502822.22-28999465671661 `\" && echo ansible-tmp-1529502822.22-28999465671661=\"` echo /home/ywbz/.ansible/tmp/ansible-tmp-1529502822.22-28999465671661 `\" ), exited with result 1", "unreachable": true
}

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

[root@Super ~]# 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下即可

【Absible学习】Ansible普通用户sudo执行指令相关推荐

  1. 学习Ansible自动化

    学习Ansible自动化 自动化运维工具 ​ shell脚本/Ansible(无客户端)/Saltstack 目录 学习Ansible自动化 1.Ansible基本概述 2.Ansible能做什么 3 ...

  2. ansible普通用户部署K8s要点

    本篇在不知道root密码的情况下,创建普通用户提权部署K8s 1.创建普通用户,给予sudo权限 2.ansible给予sudo权限,具体配置如下 [defaults] remote_user = t ...

  3. linux添加到普通用户sudo才干

    在超级用户模式添加到普通用户sudo才干 1. su -(进root用户) 2. chmod u+w /etc/sudoer 3. vim /etc/sudoers 于root ALL=(ALL) A ...

  4. linux给普通用户sudo权限

    对于linux用户来讲,普通用户的权限是有一定限制的,所以在有些操作的时候,是需要sudo权限的,那么如何在linux下赋予普通用户sudo权限呢?此处将讲解一下方法. 在login我们的系统后,如果 ...

  5. deian   授权用户 sudo权限

    ubuntu默认用户sudo不使用密码chunli@ubuntu~$ sudo vim /etc/sudoers 行尾追加一行,防止被其他策略覆盖 chunli ALL = NOPASSWD: ALL ...

  6. 存储过程中定义sql语句_学习SQL:用户定义的存储过程

    存储过程中定义sql语句 Stored procedures (SPs) are one more powerful database object we have at our disposal. ...

  7. 前用户sudo免密码

    Ubuntu 设置当前用户sudo免密码 方法1 # 备份 /etc/sudoers sudo cp /etc/sudoers . #打开 /etc/sudoers sudo visudo # 在文件 ...

  8. 华为云Centos7搭建hadoop集群二:yum源替换,ssh免密处理,hadoop用户sudo

    华为云Centos7搭建hadoop集群二:yum源替换,ssh免密处理,hadoop用户sudo 新建hadoop用户并设置密码,密码不要设置为简单的123456等,我这里已经创建过了hadoop用 ...

  9. linux禁止普通用户修改密码,禁止普通用户Sudo修改root密码

    问题模拟,普通用户可以sudo修改密码. vi /etc/sudoers #在root权限编辑sudoers文件,在结尾添加内容liuqingfeng 为普通用户 liuqingfeng ALL=/u ...

最新文章

  1. 929-独特的电子邮件地址
  2. php 如何启动ica文件,IE11打开ICA文件时无法直接调用Citrix Receiver?
  3. Java中可变长参数的使用及注意事项
  4. hdu 1147(线段相交)
  5. 2016 Top 10 Android Library
  6. 删除超过10亿用户的数据,Facebook 关闭面部识别系统
  7. [转] Android应用如何反馈Crash报告
  8. 第十天 Oracle安装前准备工作
  9. 《数据分析实战 基于EXCEL和SPSS系列工具的实践》一3.2 用“逐步推进法”推测需要的数据...
  10. beautifulsoup解析动态页面div未展开_Python爬虫 | 0xb 数据解析:PyQuery库
  11. android 跨进程 android:process,Android跨进程通信技术-多进程模式的运行机制
  12. GPS时钟模块授时仪 与 同步时钟,1PPS
  13. php根据ajax传值跳转页面_vue中动态路由的跳转(name | path) 前进后退 replace...
  14. Win10下连接树莓派ZeroW(附win10虚拟网卡驱动下载)
  15. 牛客每日练习----mxh与冰红茶的故事,mengxiang000的龙,组合数问题二
  16. matlab解线性方程组后结果是小数,MATLAB线性方程组求解
  17. VS2022安装EasyX 及 EasyX图形库安装和使用(附C++各图形编程项目示例源码)
  18. psvm怎么补全_vi/vim使用进阶: 自动补全
  19. 图片放大出现锯齿问题
  20. CMake 基础用法,掌握 CMake 诀窍

热门文章

  1. 输入URL经历的过程
  2. 51php服务器稳不稳定,百度经验:两步搞定PHP-FPM优化,让服务器更平稳
  3. Python的filter、map、reduce与lambda结合使用
  4. maven的pom文件出现Multiple annotations found at this line...,已解决
  5. freebsd linux性能,为什么有人会选择FreeBSD而不是Linux?[关闭]
  6. 20200320:反转字符串中的元音字母(leetcode345)
  7. 计算机维修 主板 打印机,一台电脑带电拨打印机接口 ,烧坏主板,不能开机
  8. redis数据结构小结
  9. vb中SendMessage函数
  10. 不同笔记本电脑BIOS的进入方法: