Fabric: Connection.sudo() 有时会引发 ThreadException/OSError 而不是 AuthFailure

创建于 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 时遇到了这个错误。

所有5条评论

我认为您可能会看到一个不同的错误:我认为它没有进入 sudo auth 阶段。 我在 Python 2.7 上看到了这个,但只有当 stdin 从 /dev/null 重定向时。 也许用pty=True再试一次?

@matt-hayden 经过数小时的调试,您让我免于精神崩溃。 我还想补充一点,即使只是一个进程,我也只在使用 multiprocessing.Process 时遇到了这个错误。

@matt-hayden 我在 python 3.6 上看到过这个问题,通过 ssh 进入本地 Ubuntu 18.04 容器(其中运行 openssh sshd)。 在完全相同的配置中,相同的“sudo”命令在 99% 的情况下正常工作(引发 AuthFailure),并在剩余的 1% 中引发 OSError。
我不记得 pty 是否设置为 True。

无论如何,我现在不使用fabric,我没有时间验证这个问题是否仍然存在。 所以我想我应该关闭这个问题

错误再次发生,是的,我也在使用 docker 容器

@luke-goddard ,如果它发生在 paramiko 中(如上面的回溯),那么这可能更适合作为 paramiko 项目中的一个问题。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

neemxyang picture neemxyang  ·  6评论

bitprophet picture bitprophet  ·  4评论

jmcgrath207 picture jmcgrath207  ·  5评论

peteruhnak picture peteruhnak  ·  4评论

26huitailang picture 26huitailang  ·  3评论