已知问题,我找到了解决方案,但它对我不起作用。
首先我有:
fatal: [openshift-node-compute-e50xx] => SSH Error: ControlPath too long
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.
所以我创建了一个~/.ansible.cfg
.内容如下:
[ssh_connection]
control_path=%(directory)s/%%h‐%%r
但是在重新运行我的 ansible 后,我仍然有一个关于"太长"的错误。
fatal: [openshift-master-32axx] => SSH Error: unix_listener: "/Users/myuser/.ansible/cp/ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com-centos.AAZFTHkT5xXXXXXX" too long for Unix domain socket
while connecting to 52.xx.xx.xx:22
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.
为什么还是太长了?
限制为 104 或 108 个字符。(我在网上发现了不同的陈述)
您在错误消息中XXX删除了一些敏感信息,因此不清楚您的路径实际上有多长。
我想%(directory)s
被替换为用户文件夹中的.ansible
目录。删除它并直接使用您的用户文件夹将为您节省 12 个字符:
control_path=~/%%h‐%%r
当然,这会用控制套接字向你的主目录发送垃圾邮件。
根据用户名的实际长度,您可以查看是否可以创建另一个目录或在任何地方找到较短的路径。例如,我使用~/.ssh/tmp/%%h_%%r
只少了3个字符,但已经足够了。
最后,如果这些都没有帮助,您仍然可以使用 /tmp
来存储套接字。但请注意,任何有权访问该计算机上/tmp
的人都可以使用您的套接字。
只是为了添加更多,因为错误显示此问题通常发生在 Unix 域套接字的控制路径太长时,因此特定于 ansible。
您可以通过更新配置文件以使用 %C 格式而不是 %r@%h:%p 来轻松解决此问题,如下所示:
$ mkdir ~/.ssh/control
$ vim ~/.ssh/config
Host *
ControlPath ~/.ssh/control/%C
ControlMaster auto
更多细节:man ssh_config将 %C 格式定义为"串联的哈希:%l%h%p%r"。并参考这里。
自定义control_path
为我解决了问题。以下是在不向主目录发送垃圾邮件的情况下执行此操作的方法。
control_path
默认为(文档):
control_path=%(directory)s/ansible-ssh-%%h-%%p-%%r
编辑 ansible 配置。
vim ~/.ansible.cfg
下面是具有新control_path
值的示例文件内容:
[defaults]
inventory=/etc/ansible/hosts
[ssh_connection]
control_path=%(directory)s/%%h-%%r
control_path_dir=~/.ansible/cp
对我来说,Ansible 配置文件丢失了。在那之后,它对我有用。