Fabric: Connection.sudo() löst manchmal ThreadException/OSError anstelle von AuthFailure aus

Erstellt am 18. Feb. 2020  ·  5Kommentare  ·  Quelle: 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

Hilfreichster Kommentar

@matt-hayden Nach stundenlangem Debuggen hast du mich gerade vor einem Nervenzusammenbruch gerettet. Ich möchte auch hinzufügen, dass ich diesen Fehler nur bei der Verwendung von multiprocessing.Process erhalten habe, auch wenn es sich nur um einen Prozess handelt.

Alle 5 Kommentare

Ich denke, was Sie möglicherweise sehen, ist ein anderer Fehler: Ich glaube nicht, dass er zur Sudo-Authentifizierungsphase kommt. Ich sehe dies in Python 2.7, aber nur, wenn stdin von /dev/null umgeleitet wird. Vielleicht versuchen Sie es noch einmal mit pty=True ?

@matt-hayden Nach stundenlangem Debuggen hast du mich gerade vor einem Nervenzusammenbruch gerettet. Ich möchte auch hinzufügen, dass ich diesen Fehler nur bei der Verwendung von multiprocessing.Process erhalten habe, auch wenn es sich nur um einen Prozess handelt.

@matt-hayden Ich habe dieses Problem bei Python 3.6 gesehen, das in den lokalen Ubuntu 18.04-Container sshing (wobei openssh sshd darin ausgeführt wird). Derselbe 'sudo'-Befehl in genau derselben Konfiguration funktionierte in 99% der Fälle korrekt (auslösende AuthFailure) und löste OSError in den verbleibenden 1% aus.
Ich kann mich nicht erinnern, ob pty auf True gesetzt war.

Wie auch immer, ich verwende jetzt keinen Stoff und habe keine Zeit, um zu überprüfen, ob dieses Problem weiterhin besteht. Also sollte ich das Thema wohl schließen

Der Fehler ist wieder aufgetreten und ja, ich habe auch einen Docker-Container verwendet

@luke-goddard , wenn es innerhalb von Paramiko aufgetreten ist (wie der Traceback oben), dann ist dies möglicherweise besser als Problem im Paramiko-Projekt geeignet.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen