2017-04-13 104 views
0

我的Ansible任務過程中,如果想知道Ansible任務命令是安全的發送一個命令行任務憑據(密碼,API密鑰)?具有憑證

沒有一個遠程服務器上應該會看到命令行(甚至更少的憑據)。

謝謝。

+0

定義「安全」 - 例如,您是否將憑證保存在Git倉庫中? –

+0

安全我的意思是說,遠程主機上的用戶(根或不用)應該永遠不會看到帶有這些憑證(歷史記錄或日誌記錄)的命令行。 證書將存儲在Git倉庫(私人)上,但我只想要關於遠程方面的信息。 – Ardinis

回答

1

如果你不信任遠程服務器 - 你永遠不應該暴露敏感憑據它,因爲具有該服務器上的root訪問權限的人可以很容易地攔截通信量,文件和存儲在該服務器上分配由你。讓別人知道你祕密的最簡單方法是轉儲臨時文件,這些文件可以在遠程服務器上完成它的工作,因爲它只需要你連接的用戶的特權!

有一個叫特殊的環境變量ANSIBLE_KEEP_REMOTE_FILES=1來解決問題。它應該讓您瞭解遠程磁盤上實際存儲的信息,即使是短暫的幾秒鐘。我執行了

ANSIBLE_KEEP_REMOTE_FILES=1 ansible -m command -a "echo 'SUPER_SECRET_INFO'" -i 127.0.0.1, all 

命令在我的機器上查看遠程計算機上創建的文件。它的執行後,我看到在我的主目錄的臨時文件,命名爲~/.ansible/tmp/ansible-tmp-1492114067.19-55553396244878/command.py

因此,讓我們用grep出來的祕密信息:

grep SUPER_SECRET ~/.ansible/tmp/ansible-tmp-1492114067.19-55553396244878/command.py 

結果:

ANSIBALLZ_PARAMS =「{ 「ANSIBLE_MODULE_ARGS」:{」 _ansible_version 「: 」2.2.2.0「, 」_ansible_selinux_special_fs「:[」 熔絲 「 」NFS「, 」vboxsf「, 」RAMFS「], 」_ansible_no_log「:假 」_ansible_module_name「: 」命令「, 」_raw_params「:」 echo \'SUPER_SECRET_INFO \'「,」_ansible_verbosity「:0,」_ansible_syslog_facility「:」LOG_USER「,」_ansible_diff「:false,」_ ansible_debug「:false,」_ansible_check_mode「:false}}'

正如你所看到的 - 沒有什麼東西是安全的從窺探的眼睛!所以如果你真的關心你的祕密 - 不要在可疑主機上使用任何關鍵的東西,使用一次性密碼,密鑰或可撤銷令牌來緩解這個問題。

0

這取決於你對這個證書的偏執。一般來說:不,這是不安全的。

我猜遠程主機上的root用戶可以看到任何東西。
例如,在遠程主機上運行strace -f -p$(pidof -s sshd),並嘗試通過ssh執行任何命令。

默認情況下Ansible寫所有調用到系統日誌遠程主機上,可以爲任務設置no_log: no避免這種情況。