Fabric: Connection.sudo()は、AuthFailureではなくThreadException / OSErrorを発生させることがあります

作成日 2020年02月18日  ·  5コメント  ·  ソース: fabric/fabric

invoke.exceptions.ThreadException: 
Saw 1 exceptions within threads (OSError):


Thread args: {'kwargs': {'buffer_': ['[sudo] password: '],
            'hide': False,
            'output': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>},
 'target': <bound method Runner.handle_stderr of <fabric.runners.Remote object at 0x7f066e63a9e8>>}

Traceback (most recent call last):

  File "/home/amezin/test/.venv/lib/python3.6/site-packages/invoke/util.py", line 233, in run
    super(ExceptionHandlingThread, self).run()

  File "/usr/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)

  File "/home/amezin/test/.venv/lib/python3.6/site-packages/invoke/runners.py", line 750, in handle_stderr
    buffer_, hide, output, reader=self.read_proc_stderr

  File "/home/amezin/test/.venv/lib/python3.6/site-packages/invoke/runners.py", line 717, in _handle_output
    self.respond(buffer_)

  File "/home/amezin/test/.venv/lib/python3.6/site-packages/invoke/runners.py", line 884, in respond
    self.write_proc_stdin(response)

  File "/home/amezin/test/.venv/lib/python3.6/site-packages/invoke/runners.py", line 960, in write_proc_stdin
    self._write_proc_stdin(data.encode(self.encoding))

  File "/home/amezin/test/.venv/lib/python3.6/site-packages/fabric/runners.py", line 67, in _write_proc_stdin
    return self.channel.sendall(data)

  File "/home/amezin/test/.venv/lib/python3.6/site-packages/paramiko/channel.py", line 846, in sendall
    sent = self.send(s)

  File "/home/amezin/test/.venv/lib/python3.6/site-packages/paramiko/channel.py", line 801, in send
    return self._send(s, m)

  File "/home/amezin/test/.venv/lib/python3.6/site-packages/paramiko/channel.py", line 1198, in _send
    raise socket.error("Socket is closed")

OSError: Socket is closed

最も参考になるコメント

@ matt-hayden何時間ものデバッグの後、あなたは私を神経衰弱から救ってくれました。 また、multiprocessing.Processを使用しているときにのみこのエラーが発生したことを付け加えたいと思います。これは、1つのプロセスであってもです。

全てのコメント5件

表示される可能性のあるものは別のエラーだと思います。sudo認証フェーズに到達しているとは思いません。 これはPython2.7で見られますが、stdinが/ dev / nullからリダイレクトされた場合のみです。 たぶんpty=True再試行しますか?

@ matt-hayden何時間ものデバッグの後、あなたは私を神経衰弱から救ってくれました。 また、multiprocessing.Processを使用しているときにのみこのエラーが発生したことを付け加えたいと思います。これは、1つのプロセスであってもです。

@ matt-hayden python 3.6でこの問題が発生し、ローカルのUbuntu 18.04コンテナー(openssh sshdが実行されている)にsshで接続されています。 まったく同じ構成の同じ「sudo」コマンドは、99%の時間で正しく機能し(AuthFailureを発生)、残りの1%でOSErrorを発生させていました。
ptyがTrueに設定されているかどうか思い出せません。

とにかく、私は現在ファブリックを使用しておらず、この問題がまだ存在することを確認する時間がありません。 だから私は問題を閉じる必要があると思います

エラーが発生しました。また、はい、Dockerコンテナも使用していました。

@ luke-goddard、それがparamiko内で発生した場合(上記のトレースバックのように)、おそらくこれはparamikoプロジェクトの問題としてより適切です。

このページは役に立ちましたか?
0 / 5 - 0 評価