ansible 是否安全地传输文件?

Does ansible transfer files securely?

我正在使用 Ansible 2.2 从笔记本电脑管理一些云服务器。我想将 OpenSSL 私钥传输到其中一台服务器上的特定位置,以供 nginx 用于 TLS 终止。当然,这是一个应该保密的文件,所以我用Ansible Vault加密了它。但是 Vault 只保护 Control Machine 上磁盘上的文件。将数据从控制机传输到受管节点时,它不会发挥作用。

我想确保私钥在传输过程中不会被监控网络流量的人泄露。 docs for the copy module 中没有具体提及我正在寻找的内容。据我所知,我与托管节点的所有通信都是通过 SSH 完成的。这是一个安全的假设吗?它包括文件传输吗?

你说得对,与受管节点的所有通信都是通过 ssh 安全完成的。您的保管库在控制器上解密,明文私钥通过安全的 ssh 连接发送并放置在您的目标节点上。

明文私钥在您的目标节点上可能变得不安全,这取决于谁可以登录、所有权、组成员身份、访问权限等。您可以安全地配置它们。

答案取决于连接类型。

有一个遵从连接的 Ansible 复制插件。插件的源代码在这里:

https://github.com/ansible/ansible/blob/bc66faa328b1413646ec249cd2753de5e09f1a35/lib/ansible/plugins/action/copy.py

这会将副本推迟到 ActionBase._transfer_file,然后再推迟到 Connection.put_file

有许多不同的连接实现方式,有些是安全的,有些则不是。如果您使用的是 SSH 连接,那么它会使用 scp 或 sftp 进行实际复制并且是安全的。

这可以在此处的 ssh 源中看到:

https://github.com/ansible/ansible/blob/442af3744ebd60c7ffcaae22b61fb762ccc7c425/lib/ansible/plugins/connection/ssh.py#L954

put_file 委托给 _file_transport_command,后者可以使用 scp、sftp、"smart" 或管道。智能检测其他三个中哪个最好使用。

注意:有一个 Ansible 复制模块,它只在本地复制文件,不需要安全复制。这是我之前的回答错误指向的,所以我删除了。