带凭证的Ansible任务命令

时间:2017-04-13 19:30:50

标签: ansible

我想知道在Ansible任务期间是否可以安全地在命令行任务中发送凭据(密码,api密钥)?

远程服务器上没有人应该看到命令行(甚至更少的凭据)。

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您不信任远程服务器 - 您绝不应该向其公开敏感凭据,因为在该服务器上拥有root访问权限的任何人都可以轻松拦截您在该服务器上分配的流量,文件和内存。某人获取秘密的最简单方法是转储临时文件,这些文件可以在远程服务器上创建它,因为它只需要您连接的用户的权限!

有一个名为ANSIBLE_KEEP_REMOTE_FILES=1的特殊环境变量用于解决问题。它应该让您了解ansible在远程磁盘上实际存储的信息,即使是短暂的几秒钟。我执行了

ANSIBLE_KEEP_REMOTE_FILES=1 ansible -m command -a "echo 'SUPER_SECRET_INFO'" -i 127.0.0.1, all
在我的机器上的

命令,用于查看在远程机器上创建的ansible文件。执行完毕后,我会看到我的主目录中的临时文件,名为~/.ansible/tmp/ansible-tmp-1492114067.19-55553396244878/command.py

所以,让我们来看看秘密信息:

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": [" fuse"," nfs"," vboxsf"," ramfs"]," _ansible_no_log":false,& #34; _ansible_module_name":"命令"," _raw_params":" echo \' SUPER_SECRET_INFO \'",&#34 ; _ansible_verbosity":0," _ansible_syslog_facility":" LOG_USER"," _ansible_diff":false," _ansible_debug":false,&# 34; _ansible_check_mode":false}}'

正如你所看到的 - 窥探的眼睛里没有任何东西是安全的!因此,如果您真的担心自己的秘密 - 请勿使用任何对可疑主机至关重要的内容,请使用一次性密码,密钥或可撤销令牌来缓解此问题。

答案 1 :(得分:0)

这取决于你对这个凭据的偏执程度。一般来说:不,这不安全。

我猜远程主机上的root用户可以看到任何内容 例如,在远程主机上运行strace -f -p$(pidof -s sshd)并尝试通过ssh执行任何命令。

默认情况下,Ansible将所有调用写入远程主机上的syslog,您可以为任务设置no_log: no以避免这种情况。