Ansible:SSH错误:unix_listener:对于Unix域套接字来说太长了

时间:2016-03-13 13:14:55

标签: ssh amazon-ec2 ansible

这是一个已知问题,我找到了一个解决方案,但它对我不起作用。

首先我有:

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.

为什么还太长?

4 个答案:

答案 0 :(得分:18)

限制为104或108个字符。 (我在网上发现了不同的陈述)

您在错误消息中列出了一些敏感信息,因此不清楚您的路径实际存在多长时间。

我猜$.ajax()已替换为users文件夹中的%(directory)s目录。删除它并直接使用您的用户文件夹可以节省12个字符:

.ansible

当然,这会通过控制套接字将您的主目录垃圾邮件。

根据用户名的实际长度,您可以看到是否可以创建另一个目录或在任何地方找到更短的路径。例如,我使用control_path=~/%%h‐%%r

只有3个字符少,但这已经足够了。

最后,如果这些都没有帮助,您仍然可以使用~/.ssh/tmp/%%h_%%r来回退存储套接字。但请注意,在该计算机上有权访问/tmp的任何人都可以使用您的套接字。

答案 1 :(得分:4)

自定义control_path为我解决了问题。以下是如何在不向主目录发送垃圾邮件的情况下执行此操作。

control_path默认为(documentation):

control_path=%(directory)s/ansible-ssh-%%h-%%p-%%r

编辑ansible config。

vim ~/.ansible.cfg

以下是具有新control_path值的示例文件内容:

[defaults]
inventory=/etc/ansible/hosts

[ssh_connection]
control_path=%(directory)s/%%h-%%r
control_path_dir=~/.ansible/cp

答案 2 :(得分:1)

对我来说,Ansible配置文件丢失了。之后它对我有用。

答案 3 :(得分:0)

只需添加更多内容,因为错误表明此问题通常在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”。并参考here