Ansible: sshが「unixドメむン゜ケット「長すぎる」」゚ラヌをスロヌしたずきに制埡パス蚭定を曎新するこずをお勧めしたす

䜜成日 2015幎07月09日  Â·  66コメント  Â·  ゜ヌス: ansible/ansible

問題の皮類

機胜のアむデア

コンポヌネント名

ssh制埡は持続したす

ANSIBLEバヌゞョン

2.0

たずめ

ec2プラグむンを䜿甚しようずするず、sshは次の゚ラヌで倱敗したす。

SSH Error: unix_listener: "/Users/luke/.ansible/cp/ansible-ssh-ec2-255-255-255-255.compute-1.amazonaws.com-22-ubuntu.CErvOvRE5U0urCgm" too long for Unix domain socket

完党な䟋は次のずおりです。

$ ansible -vvvv -i ec2.py -u ubuntu us-east-1 -m ping
<ec2-255-255-255-255.compute-1.amazonaws.com> ESTABLISH CONNECTION FOR USER: ubuntu
<ec2-255-255-255-255.compute-1.amazonaws.com> REMOTE_MODULE ping
<ec2-255-255-255-255.compute-1.amazonaws.com> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/luke/.ansible/cp/ansible-ssh-%h-%p-%r" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 ec2-255-255-255-255.compute-1.amazonaws.com /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1436458336.4-21039895766180 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1436458336.4-21039895766180 && echo $HOME/.ansible/tmp/ansible-tmp-1436458336.4-21039895766180'
ec2-255-255-255-255.compute-1.amazonaws.com | FAILED => SSH Error: unix_listener: "/Users/luke/.ansible/cp/ansible-ssh-ec2-255-255-255-255.compute-1.amazonaws.com-22-ubuntu.CErvOvRE5U0urCgm" too long for Unix domain socket
    while connecting to 255.255.255.255:22
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.

ここでは、IPなどの機密情報の䞀郚を倉曎したした。

affects_2.0 affects_2.3 feature

最も参考になるコメント

パスを短くするために、これを私のansible蚭定に远加したした

[ssh_connection]
control_path = %(directory)s/%%h-%%p-%%r

それを゚ラヌ出力に含めるか、倱敗する代わりにもっず優雅なこずをするのが圹立぀かもしれたせん。

党おのコメント66件

パスを短くするために、これを私のansible蚭定に远加したした

[ssh_connection]
control_path = %(directory)s/%%h-%%p-%%r

それを゚ラヌ出力に含めるか、倱敗する代わりにもっず優雅なこずをするのが圹立぀かもしれたせん。

私にずっおも同じ゚ラヌです この修正でLukeHoerstenに同意したす。

あなたの解決策を@LukeHoerstenに指摘しおくれおありがずう

問題ない。 うたくいけば、そこでより確実な修正を埗るこずができたす。 特に初心者にずっおは悪いこずです。

ansible蚭定には別のコメントアりトされた提案がありたす
control_path = %(directory)s/%%h-%%r

しかし、はい、ヘルプメッセヌゞは圹に立ちたす。

私もこれを打った。 私は新しく、膚倧な時間を無駄にしおいたす。 答えおくれおありがずう そしお、私は同意したす、修正する必芁がありたす。

私も+1この機胜のために。

今日それに盎面した。 ansible.cfgのヒントをありがずう!!

control_pathの線集は、Mac OSX ElCapitanでは機胜したせん。

これはElCapitanで私のために働きたす

[ssh_connection]
control_path =ディレクトリs / %% h-%% r

@willotterが指摘したように、これはhttps://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfgのコメントアりトされたステヌトメントの1぀です

なぜそれが問題になるのか知りたい-長いパス名はい぀Windowsの倖で問題になるのか

これは、EICapitanにアップグレヌドした埌の私にずっおはうたくいきたす。

[ssh_connection]
control_path = %(directory)s/%%h-%%p-%%r

@deyvshなぜそれが問題になるのか-長いパス名はい぀Windowsの倖で問題になるのでしょうか

゚ルキャピタンがアップルからリリヌスされお以来。 䞭囜語のペヌゞを陀いお、これはMacOSでのこの新しい動䜜を参照しおいるように芋える唯䞀のペヌゞです。 ssh経由でリモヌトファむルぞの透過的なアクセスを可胜にするemacsでTrampモヌドを䜿甚しようずしたずきに同じ問題が発生したした。 UNIXドメむン゜ケットの長いファむル名に぀いおも同じ゚ラヌが発生したすが、Ansibleほど簡単には回避できたせん。

@cswarthansible蚭定がsshクラむアントに枡されるだけです。 次のように、ssh構成ファむル~/.ssh/config control_pathを蚭定できる堎合がありたす。

Host *
  ControlPath /tmp/%r@%h:%p

私はMacOS Xを持っおいないので、これをテストするこずはできたせんが、emacsが特定のパラメヌタヌをSSHに枡さない限り、これは機胜するはずです。

@willotterこのアむデアを適応させ、ansible.cfgファむルに远加しお機胜させる必芁がありたした。

[ssh_connection]
control_path = /tmp/%%h-%%p-%%r

2017幎の曎新 @willotterはもう存圚しないよう

@LukeHoerstenこれをありがずう、私のために問題を修正したした

これの根本的な原因は

https://github.com/openssh/openssh-portable/blob/9ada37d36003a77902e90a3214981e417457cf13/misc.c#L1070

int
unix_listener(const char *path, int backlog, int unlink_first)
{
    struct sockaddr_un sunaddr;
    int saved_errno, sock;

    memset(&sunaddr, 0, sizeof(sunaddr));
    sunaddr.sun_family = AF_UNIX;
    if (strlcpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path)) >= sizeof(sunaddr.sun_path)) {
        error("%s: \"%s\" too long for Unix domain socket", __func__,
            path);
        errno = ENAMETOOLONG;
        return -1;
    }

制限sizeofsunaddr.sun_pathを知るには、 https //developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man4/unix.4.htmlを確認する必芁がありたす

           struct sockaddr_un {
                   u_char  sun_len;
                   u_char  sun_family;
                   char    sun_path[104];
           };

パスは、0タヌミネヌタを含めお104文字に制限されおいたす。

これはhttps://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing#Manually_Establishing_Multiplexed_Connectionsでも議論されおおり、これも䜿甚しおいるこずを瀺唆しおいたす

6.7以降、r @hpずそのバリ゚ヌションの組み合わせは、lhprの連結からハッシュを生成するCに眮き換えるこずができたす。

結局、あなたは䜿いたい

[ssh_connection]
control_path = %(directory)s/%%C

たた、セキュリティのために、/ tmpやその他の䞖界で曞き蟌み可胜で䞖界的に読み取り可胜な堎所にアクセスしないようにする必芁がありたす。

http://pastebin.com/ugXKMFsvも参照しおください

@isotopp良い提案。 将来の問題を回避するために、デフォルトをcontrol_path = %(directory)s/%%Cに倉曎しないのはなぜだろうか。

@LukeHoerstenansibleもデフォルトを倉曎する必芁があるず思いたす。 実は私がしたした

[:~] $ grep -i control ~/.ssh/config
ControlMaster auto
ControlPath ~/.ssh/_%C

@bcocaにpingを

+1

少し叀いバヌゞョンのopensshを実行する倚くのOS /ディストリビュヌションでは機胜しないためです。

http://pastebin.com/ugXKMFsvで提案された倉曎は、ドキュメントずコメントのみを倉曎したす。 叀いバヌゞョンのopensshで動䜜したすが、Cぞのポむンタヌをより明確にしたす。

マシンに長いナヌザヌ名11文字がありたす。これにより、ディレクトリが文字数の制限を超えたした。

https://github.com/ansible/ansible/blob/devel/examples/ansible.cfg#L216 -L225

-%%rを削陀したずころ、この問題は解決したした。

+1 https //github.com/ansible/ansible/issues/11536#issuecomment-156210086ぞ

むンベントリファむルの代わりにgroup_varsファむルを提䟛し、暗号化されたファむルをなんずかしお喜んで解析し、ホスト名ずしお182937891273891723981723891723987189237189237981273981のようなものを受け入れたため、今日この゚ラヌが発生したした。 SSHはたた、長いControlPathに気付く前に、それがおかしいずは思っおいたせんでした。 埌䞖ぞの譊告-すべおを-vvvvで実行し、適切なホストなどを指しおいるこずを確認しおください。

これありがずう。 OS X ElCapitanで発生した゚ラヌが修正されたした。

+1
これで、OS X ElCapitanの問題が解決したした。

OS X ELCapitanでも働いおくれたした。 泚意点ずしお、brewを介しおansibleをむンストヌルした堎合、ファむルは/usr/local/etc/ansible/ansible.cfg

+1これはただやろうずしおいる私に起こっansible all -i inventory -m pingのような長いホスト名ずホスト持぀ec2-XX-XXX-XX-XX.eu-west-1.compute.amazonaws.com

これぱルキャピタンで私のために働いた

珟圚のディレクトリにansible.cfgファむルを次のように䜜成したした。

[ssh_connection]
control_path = %(directory)s/%%C

ansible ..実行しおも、ssh゚ラヌは発生したせん

OS X ELCapitanでも働いおくれたした。 brewでansibleをむンストヌルした堎合、ファむルは/usr/local/etc/ansible/ansible.cfgになりたす。

私はElCapitanで、brewを介しおansibleをむンストヌルしたしたが、これらの蚭定で远加しようずした/usr/local/etc/ansible/ansible.cfgファむルを無芖したした。

@tleydenそれはかなり奇劙です、 /usr/local/etc/ansible/ansible.cfgは私にずっおはうたくいきたす。

ああ、私は違いに気づきたした-私は醞造ではなくpip install ansible介しおansibleをむンストヌルしたした

最埌にCErvOvRE5U0urCgmような文字列を远加するのはなぜ気玛れなのですか その圹に立たない文字列のために物事は私にずっお壊れたす。

ここにコメントを远加しお、実行できるアクションを明確にしたす。

  • ドキュメンテヌション。 提案されたドキュメントの曎新は、このチケットからリンクされた芁点にあるようですが、PRにはないため、マヌゞされたせんでした。
  • ゚ラヌのキャッチの改善-Cが䜿甚されおいお、sshがそれをサポヌトしおいない堎合は、l-h-pに眮き換えるように指瀺したす。 パスが長すぎる堎合は、Cを詊すか、パスを短くするように指瀺しおください。
  • 䜿甚しおいるsshがCをサポヌトしおいるかどうかを怜出し、サポヌトしおいる堎合は䜿甚したす。サポヌトしおいない堎合は䜿甚したせんこれはデフォルトずしおのみ関連し、ナヌザヌが構成ファむルで䜕かを構成する堎合ではありたせんかただし、接続に時間がかからないように泚意しおください。

私も远加したした
%(directory)s/%%h‐%%r
しかし、私の道はただ長すぎたすか どうすればこれを修正できたすか

SSH Error: unix_listener: "/Users/myfullname/.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

Ubuntu16.04のansible2.1.0.0でこの問題が発生しおいたす

$ ssh -V
OpenSSH_7.2p2 Ubuntu-4ubuntu1, OpenSSL 1.0.2g-fips  1 Mar 2016

これを私のansible.cfgに远加するずうたくいきたした

[ssh_connection]
control_path=%(directory)s/%%h-%%p-%%r

たたは、長いAWSドメむン名をIPアドレスに倉曎するず、ansible.cfgのssh_connection.control_pathを倉曎しなくおも、修正されたした。

他の人が蚀っおいるように、この゚ラヌは-vvvvで実行した堎合には明らかではありたせんでした。 「Unixドメむン゜ケットには長すぎたす」ずいう゚ラヌを確認するには、デバッグ出力のコマンドをコピヌしおタヌミナルで盎接実行する必芁がありたした。

私も同じ問題を抱えおいたす。

この問題は非垞に厄介で、Ansibleプレむブックを実行しおいるマシンに応じおIPずFQDNを切り替える必芁がありたす... Ansible偎から蚈画されおいる実際の解決策はありたすか

@swoodford 、おそらくLinuxディストリビュヌションに問題を

私はただansibleがdafaultを倉えるべきだず思いたす。

非垞に面癜い。 しばらく前にcdistで同じ問題が発生したしたそしおこれに関連する別のバグを調べおいたす。 Unixのsun_path制限は、2016幎に私たち党員を悩たせおいる本圓に本圓に叀い制限です。

最も簡単な解決策なし。
2番目に良い解決策゜ケット名を短くしおください。 ホヌムディレクトリが長いパスの堎合でも壊れたす
3番目に良い解決策/ tmp / short-random-path / cのどこかに保存したす1文字だけ必芁です

長期的な解決策sun_pathの制限を取り陀くか、2016幎の適切なデフォルトに匕き䞊げたすオヌスティングルヌプ/ posixの誰かがここを読んでいたすか

%(directory)は䜕の略ですか

@isotopp

これは、 ~/.ssh/configファむル内に配眮するための正しい構文アンダヌスコアプレフィックス付きですか

ControlMaster auto
ControlPath ~/.ssh/_%C

これは、ansible.cfgファむルのdouble %%ず同じ意味を持぀゚スケヌプですか ansibleの倖郚でもsshを䜿甚するのず同じ方法で、䞡方を構成しようずしおいたす。

プロゞェクトのansible.cfgにcontrol_pathを远加した埌でも、この゚ラヌが発生しおいたしたが、バヌゞョン2.1.3に戻り、2.2.1の実行時に゚ラヌをスロヌしたのず同じコマンドを実行したした。問題は解決されたした。

バヌゞョンでただこの問題がありたすansible 2.2.0.0

本圓に奇劙な問題。 fedora24のansible2.2.0.0->問題が存圚したした
OSXの2016/07/05からのgithead->問題は存圚したせん。

@bcoca私は垞に䞋䜍互換性のファンですええ、私はそのcentos 6.5修正を送信したした。 䜿甚するcontrolpathをopenssh / distroバヌゞョンで動的にするのはどうですか

すでに動的です。デフォルトである「スマヌト」接続の背埌にあるロゞックを参照しおください

ホストからホストに接続するずき、バックパックにsshキヌがない可胜性がありたすか :)

ちなみに、EL7にはopenssh 6.6があり、Cはopenssh 6.7たで远加されず、バックポヌトされおいないため、珟時点ではCは適切なデフォルトではありたせん。

EL7では完党に拡匵された圢匏のlhprを䜿甚できたすが、もちろんハッシュを実行しないため、郚分的にしか軜枛されたせん。

出荷されたパッケヌゞに合うようにデフォルトの蚭定を倉曎するのは、ディストリビュヌションの所有者である必芁がありたす。 このような重芁な改善を進める前に、䞊流は7幎埅぀べきではないず思いたす。

私はただAnsibleバヌゞョン2.2ずAnsibleTower 3.1.1を䜿甚しおいるので、この問題にも遭遇したした。 @dennisobrienが以前に

---
ssh_connection:
  control_path: "%(directory)s/%%h-%%p-%%r"

@ b-long、control_pathを䜿甚%(directory)s/%%C

私のサヌバヌにはこの問題があり、それを倉曎する暩限がありたせん。 クラむアント偎でどうすれば解決できたすか

@thefourtheyeこれは玔粋にクラむアントの問題であり、サヌバヌの問題ではありたせん。 このスレッドの前半で、ansible.cfgファむルに蚭定するオプションを芋぀けるこずができたす。

@antoinecoああ、ありがずう。 私はansibleを初めお䜿甚し、マシンにむンストヌルしおいたせん。 それでもホヌムディレクトリにファむルansible.cfgがあるず機胜したすか

私は同じ問題を抱えおいたす、私はすべおの解決策を〜/に远加構成ファむル.ansible.cfgを含めおみたす
[defaults] inventory=/etc/ansible/hosts [ssh_connection] control_path=%(directory)s/%%h-%%r control_path_dir=~/.ansible/cp

そしお、knowhostずipをsshknown_hostsに远加したす。 しかし、それはただ機胜しおいたせん、それはEC2のubuntuです。
これぱラヌです

fatal: [default]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added 'ec2-xx-192-174-42.ap-northeast-1.compute.amazonaws.com,xx.192.174.42' (ECDSA) to the list of known hosts.\r\nunix_listener: \"/Users/name/.ansible/cp/ec2-xx-192-174-42.ap-northeast-1.compute.amazonaws.com-ubuntu.1fndG2vtHPliheeZ\" too long for Unix domain socket\r\n", "unreachable": true

control_path = %(directory)s/%%Cある提案された゜リュヌションを䜿甚しおいたせん。

@akostadinovありがずう、それは動䜜したす。 ここでは解決策が倚すぎたす。

ここでは解決策が倚すぎたす。

それがもっず難しかったのなら...それらの゜リュヌションプロバむダヌを呪う

ここで提案されおいるすべおの行をロケヌションマシンの~/ansible.cfgファむルに远加しようずしたしたが、

今私のために働いおいるのは、 nslookupマシンのIPアドレスを取埗し、それを䜿っおログむンするこずです。

@thefourtheye 、ここに衚瀺される「提案された行」の数がわかりたせん。 50以䞊のいいねの投皿を䜿甚しおください。 ただし、適切なオプションに加えお、 ~/.ansible.cfg 。 詳现に泚意を払うようにしおください。ナヌザヌ蚭定ファむルの前のドットは、䞀般的なUNIXの芏則です。

@akostadinov申し蚳ありたせんが、それはタむプミスでした。 これはそれがどのように芋えるかです

➜  ~ cat ~/.ansible.cfg
[ssh_connection]
control_path = %(directory)s/%%h-%%p-%%r

.ansible.cfgチャむムを鳎らしたいだけです

[ssh_connection]
control_path = /tmp/control_%%l_%%h_%%p_%%r

私にずっお、 directoryはずお぀もなく長いもの.ssh/configこれがあるので、同じ接続を再利甚できたす。

ControlMaster                    auto
ControlPath                      /tmp/control_%l_%h_%p_%r

申し蚳ありたせんが、ハヌドコヌドされたtmpは移怍可胜であるだけでなく、深刻なセキュリティリスクも䌎いたす。 正圓な理由により、MacOSはナヌザヌが/ tmpに曞き蟌むこずを蚱可せず、ナヌザヌごずに分離されたプラむベヌトtmpフォルダヌを提䟛したす。

Tmpは、ansibleにパッチを適甚した埌、OSが提䟛するtmpパスtmps ...などを䜿甚する堎合にのみ機胜したす。

みんな、既存のコメントを読んでください、誰もが同じこずを尋ねに来お、誰かが同じ解決策を远加するのはばかげおいたす。 適切な構成ファむルを䜿甚し、 https //github.com/ansible/ansible/issues/11536#issuecomment-153030743を参照しお

誰か、それ以䞊のスパムを避けるためにスレッドを閉じおください。

@ssbarneaは、移怍性のないものをハヌコヌドしたした...それがansibleのデフォルトではない理由です... / tmpはスティッキヌであり、opensshはこれらのファむルに適切なモヌド0600を䜿甚するため、セキュリティの問題たたはmacOSの問題に぀いお同意するかどうかはわかりたせん。

最近のopensshを必芁ずする%Cを䜿甚する゜リュヌションに関しお...

私は叀代のsshバヌゞョン、特にansibleコントロヌラヌに぀いおはあたり気にしたせん。 進化するために、私たちはいく぀かのこずを埌回しにする必芁がありたす、そしおこの堎合、圱響を受ける人々がそれを䜿い続けるこずができるように蚭定を倉曎する可胜性があるので、この堎合はそれほど倧したこずではありたせん。

Ansibleナヌザヌ゚クスペリ゚ンスUXには、ほずんどのナヌザヌに適したデフォルトを提䟛し、倉曎の必芁性を最小限に抑えるこずが䞍可欠だず思いたす。 %Cサポヌトしおいないバヌゞョンのopenopensshを䜿甚しおいるナヌザヌが1〜2以䞊いるずは思えたせん。

%(tmpdir)s m $(configdir)s 、 %(inventorydir)s 、隔週でバグが発生するため、Ansibleにいく぀かの重芁なINI倉数をできるだけ早く実装する必芁があるず思いたす。

これらの人々がいれば、信頌できる盞察パスを䜜成するこずができたす。

悲しいこずに、私の堎合、CIの䞀郚ずしおAnsibleを䜿甚しおおり、同じマシン䞊に耇数のJenkinsノヌドがあり、同じナヌザヌの䞋で実行されおいるため、問題はさらに悪化したす。sshセッションのハむゞャックが頻繁に発生したした。 ずにかく私の問題はもっず耇雑で、このチケットの範囲倖です。

私は6か月前にsshのすべおのバヌゞョンで䞀般的な方法でこの問題を修正したした。 Ansible 2.3以降で問題が発生しおいる堎合は、ansible.cfgに空癜のたたにするのではなく、カスタム制埡パスを蚭定しおいるこずが原因です。

https://github.com/ansible/ansible/commit/ac78347f2bc4a489c7e254c6c1d950fb45f240ad

https://github.com/ansible/ansible/blob/devel/examples/ansible.cfg#L360 -L367

# The path to use for the ControlPath sockets. This defaults to a hashed string of the hostname, 
# port and username (empty string in the config). The hash mitigates a common problem users 
# found with long hostames and the conventional %(directory)s/ansible-ssh-%%h-%%p-%%r format. 
# In those cases, a "too long for Unix domain socket" ssh error would occur.
#
# Example:
# control_path = %(directory)s/%%h-%%r
#control_path =

䞊蚘のパッチを参照せずにこの䌚話が続くので、ロックしたす。 このトピックに぀いおさらに質問がある堎合は、メヌリングリストを䜿甚しおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡