Fabric: Connection.sudo () a veces genera ThreadException / OSError en lugar de AuthFailure

Creado en 18 feb. 2020  ·  5Comentarios  ·  Fuente: 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

Comentario más útil

@ matt-hayden Después de horas de depuración, acabas de salvarme de un colapso mental. También me gustaría agregar que solo recibí este error mientras usaba multiprocesamiento.Proceso incluso si es solo un proceso.

Todos 5 comentarios

Creo que lo que puede estar viendo es un error diferente: no creo que esté llegando a la fase de autenticación de sudo. Veo esto en Python 2.7, pero solo cuando stdin se redirige desde / dev / null. ¿Quizás intentarlo de nuevo con pty=True ?

@ matt-hayden Después de horas de depuración, acabas de salvarme de un colapso mental. También me gustaría agregar que solo recibí este error mientras usaba multiprocesamiento.Proceso incluso si es solo un proceso.

@ matt-hayden He visto este problema en python 3.6, ssh'ing en el contenedor local de Ubuntu 18.04 (con openssh sshd ejecutándose en él). El mismo comando 'sudo' en exactamente la misma configuración funcionaba correctamente el 99% del tiempo (aumentando AuthFailure) y aumentando OSError en el 1% restante.
No recuerdo si pty se estableció en True.

De todos modos, no estoy usando fabric ahora y no tengo tiempo para verificar que este problema aún está presente. Así que supongo que debería cerrar el tema.

El error sucedió, nuevamente y sí, también estaba usando un contenedor docker

@ luke-goddard, si ocurrió dentro de paramiko (como el rastreo anterior), entonces tal vez esto sea más apropiado como un problema en el proyecto paramiko.

¿Fue útil esta página
0 / 5 - 0 calificaciones