ansible普通用戶su切換問題總結

Ansible 提供一種最簡單的方式用于發布、管理和編排計算機系統的工具,你可在數分鍾內搞定。 Ansible 是一個模型驅動的配置管理器,支持多節點發布、遠程任務執行。

在之前我曾總結了一點ansible系列博文,本篇還承接之前的篇幅吧。在現網應用中,安全加固後的主機是不允許直接以root用戶登陸的,而很多命令又需要root用戶來執行,在不改造現網的情況下。希望通過一個普通用戶先登陸,再su切到root執行。而且每台主機的普通用戶和root用戶的密碼又不同。希望在通過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執行的內容

功能實現了,最後要說的是,由于該配置文件中涉及到多台主機的用戶名密碼,所以該文件的安全工作一定要做好。

更多相關文章
  • CentOS安裝KLOXO面板與一些問題總結
    KLOXO面板Kloxo簡介Kloxo的前身是lxadmin,是一款免費的虛擬主機管理系統,安裝簡單,功能強大,可以快速地在red hat,centos系列linux系統的主機上,下面我來總結一下CentOS安裝KLOXO面板與一些問題總結KLOXO已經有段日子沒有更新了,最後更新于2011-11- ...
  • Jedis 是 Redis 官方首選的 Java 客戶端開發包,我們如果使用Redis的朋友可能對于Redis並不陌生了,下面我們一起來看Jedis版本升級後的問題總結與解決 辦法吧.最近因爲jedis 2.1.0接
  • 這些給大家介紹在使用Sencha ExtJS碰到一些問題總結,包括有form 表單提交失敗,ExtJS 限制text最大字符數, Ajax 提交SESSION失效的問題等等問題.最近一直在使用Sencha進行前端開發
  • hive導到mysql時經常會碰到一些問題,下面我總結了一在使用sqoop從hive導到mysql時一些常見問題總結.hive 版本hive-0.11.0sqoop 版本 sqoop-1.4.4.bin__hadoo
  • app console命令是Symfony2中的了,這個命令是小編用到的比較多了,用到多問題也不少了,下文我們來整理一些app console問題總結.本人在使用php app/console -s進入symfony
  • 本文章總結了在使用SQL Server2008安裝中一些報錯問題總結,大家可參考參考.SQL Server2008安裝報錯: system.diagnostics處理程序時出錯是sql2008中安裝時常碰到的問題,下
  • ipad/ipad air開不了機怎麽辦 ipad開不了機問題總結
    ipad/ipad air平板開不了機我們可以從幾個方法來進行總結,沒電了,軟件出錯了,系統壞了,從這三個方法我們是完全可以排除你的問題了,具體的方法就和一聚教程小編一起來看看ipad開不了機問題總結吧.根據小編的經驗是ios設備開不了機了問題多半是如沒電了.卡死機了.系統崩潰問題了,下面小編就針對
  • csv是一種超級簡單的excel表格形式了,我們生成只要按指定格式然後生成.csv文件就可以了,雖然說簡單但使用中也會碰到不少的問題,下面小編來爲各位總結一下.例子,生成csv文件並下載//要生成csv文件的數組$csvArr=array();$csvArr[]=array('用戶編號1','上班日
一周排行