Fabric: Connection.sudo () иногда вызывает ThreadException / OSError вместо AuthFailure

Созданный на 18 февр. 2020  ·  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'ing в локальный контейнер Ubuntu 18.04 (с запущенным в нем openssh sshd). Та же самая команда sudo в точно такой же конфигурации работала правильно 99% времени (повышая AuthFailure) и вызывая OSError в оставшемся 1%.
Я не могу вспомнить, было ли для pty установлено значение True.

В любом случае, сейчас я не использую ткань, и у меня нет времени проверить, сохраняется ли эта проблема. Думаю, мне следует закрыть вопрос

Ошибка произошла снова, и да, я также использовал контейнер докеров

@ luke-goddard, если это произошло в paramiko (как в случае с трассировкой выше), то, возможно, это более уместно в качестве проблемы в проекте paramiko.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги