Accelerated Mode

    你在使用 Ansible 1.5 或者 之后的版本吗? 如果是的话,因为被称之为 “SSH pipelining” 的新特性,你也许就不需要加速模式了.详情请阅读:ref:pipelining 部分的章节.

    对于使用 1.5 及之后版本的用户,加速模式只在以下情况下有用处: (A) 管理红帽企业版 Linux 6 或者更早的那些依然使用 paramiko 的版本 或者 (B) 像在文档中描述的那样:无法在 TTYs 中使用 sudo.

    如果你能够使用pipelining,Ansible 将会降低通过 wire 传输文件的总量来提升有效率,并且在几乎所有情况下(甚至可能包括了传输大型文件)都能与加速模式相匹敌.归功于更少的移动文件块,管道几乎在所有的情况下优于加速模式.

    加速模式将为了支持那些仍使用红帽企业版 Linux 6 做主控机或因其他环境因素受限制而保留.

    加速模式详解

    加速模式只是使用来加速连接的,它仍需使用 SSH 来进行初始安全密钥交换.它没有额外增加需要管理的基础设施的公共key,也不需要诸如 NTP 或 DNS.

    加速模式在任何情况下将比启用 ControlPersist 特性的 SSH 快2-6倍,10倍于 paramiko.

    加速模式通过启动一个临时的 SSH 守护进程来工作.只要这个守护进程在运行,Ansible 将会直接通过 socket 来连接.Ansible 通过在连接时交换临时的 AES key 来确保安全(这个秘钥对每个主机都是不同的并且会定期重新生成).

    默认配置下,Ansible 会为加速模式开启5099端口(此配置可修改).一旦运行了,守护进程将会维持连接 30 分钟,过了时限后该连接将会自动终结,你需要重启一个 SSH.

    • 支持 sudo 命令(下文参见详情)
    • 更少的依赖需求.ZeroMQ 不在需要,除了 python-keyczar 外再无其他依赖包需要安装.

    只需在你的 play 中添加 accelerate: true 即可使用加速模式:

    如果你希望改变 Ansible 用于加速模式的端口,你只需添加 accelerated_port 选项:

    accelerate_port 选项也同样能通过指定环境变量 ACCELERATEPORT 或者在你的 _ansible.cfg 中配置:

    如先前所述,加速模式同样支持通过 sudo 命令来运行任务.但是有两点需要予以提醒:

    • 你必须移除 sudoers 选项中的 requiretty.
    • 目前仍不支持 sudo 密码提示,所以 NOPASSWD 选项是必须的.

    当启用时,守护进程将会打开一个 UNIX socket 文件(默认位于 $ANSIBLE_REMOTE_TEMP/.ansible-accelerate/.local.socket).来自 SSH 的新的连接能够通过这个 socket 文件来上载新的秘钥给守护进程.