2017-04-13 74 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避免这种情况。