Ansible 工作时,管理节点上是否需要 SSH SFTP 子系统?

Ansible 工作时,管理节点上是否需要 SSH SFTP 子系统?

当我跑步时:

ansible all -a "/bin/echo hello" -u myuser

我回复说:

mydomain.myhost.com | FAILED => failed to open a SFTP connection (Channel closed.)

我尝试连接的托管节点上的 SFTP 子系统已被禁用。

管理节点上是否需要 SFTP?Ansible 文档没有具体提到 SFTP:http://docs.ansible.com/intro_installation.html#managed-node-requirements

我尝试设置此值在 ansible.cfg 中:

scp_if_ssh=True

...但没起什么作用。(感谢神奇狗狗弗雷德建议

我还确保我的非交互式 shell 不会产生任何输出正如这里建议的那样

答案1

是的,ansible 依赖于能够将文件传输到远程计算机。默认情况下,它使用 sftp 来执行此操作。你可以覆盖它以使用 scp

scp_if_ssh
Occasionally users may be managing a remote system that doesn’t have SFTP enabled. If set to True, we can cause scp to be used to transfer remote files instead:

scp_if_ssh=False
There’s really no reason to change this unless problems are encountered, and then there’s also no real drawback to managing the switch. Most environments support SFTP by default and this doesn’t usually need to be changed.

以上信息取自此页面:

http://docs.ansible.com/intro_configuration.html#openssh-specific-settings

答案2

以下是我最终做的事情:

  1. 复制/etc/ansible/ansible.cfg~/.ansible.cfg
  2. 已编辑 ~/.ansible.cfg
  3. 变成#scp_if_ssh = Falsescp_if_ssh = True
  4. 已添加ssh_args =[ssh_connection]部分。
  5. -c SSH使用flag运行我的命令

谢谢神奇魔法狗弗雷德为我指明了正确的方向。

答案3

您可以使用connection: paramiko。即使stfpscp都不可用,它也能正常工作。在底层,它使用与“普通”ssh 相同的 ssh,因此即使~/.ssh/config适用。

或者,可以通过环境变量、在命令行上通过-c开关以及在中指定连接类型ansible.cfg

例如:

- hosts: all
  connection: paramiko
  tasks:
    command: echo ok

或者

ansible all -c paramiko -a "/bin/echo hello" -u myuser

如果未安装 paramiko,则可能必须通过 pip ( pip install paramiko) 或使用特定于发行版的包管理器进行安装(apt install python3-paramiko如果您在 python3 中使用 ansible,请检查使用ansible --version

相关内容