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๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ์—๋งŒ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๋ง๋ถ™์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  5 ๋Œ“๊ธ€

๋‚˜๋Š” ๋‹น์‹ ์ด๋ณด๊ณ ์žˆ๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. sudo auth ๋‹จ๊ณ„์— ๋„๋‹ฌํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Python 2.7์—์„œ ์ด๊ฒƒ์„ ๋ณด๊ณ  ์žˆ์ง€๋งŒ stdin์ด /dev/null์—์„œ ๋ฆฌ๋””๋ ‰์…˜๋  ๋•Œ๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. pty=True ๋‹ค์‹œ ์‹œ๋„ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@matt-hayden ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ๋””๋ฒ„๊น…ํ•œ ํ›„ ๋‹น์‹ ์€ ์ €๋ฅผ ์ •์‹ ์  ์‡ ์•ฝ์—์„œ ๊ตฌํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์ผ์ง€๋ผ๋„ multiprocessing.Process๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ์—๋งŒ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๋ง๋ถ™์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@matt-hayden python 3.6์—์„œ ๋กœ์ปฌ Ubuntu 18.04 ์ปจํ…Œ์ด๋„ˆ๋กœ ssh'ing(openssh sshd ์‹คํ–‰)์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋™์ผํ•œ ๊ตฌ์„ฑ์˜ ๋™์ผํ•œ 'sudo' ๋ช…๋ น์ด 99%์˜ ์‹œ๊ฐ„ ๋™์•ˆ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๊ณ (AuthFailure ๋ฐœ์ƒ) ๋‚˜๋จธ์ง€ 1%์—์„œ๋Š” OSError๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
pty๊ฐ€ True๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์ €๋Š” ์ง€๊ธˆ ํŒจ๋ธŒ๋ฆญ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ์œผ๋ฉฐ ์ด ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•  ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ๋‹ซ์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ, ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@luke-goddard , ์œ„์˜ ์—ญ์ถ”์ ๊ณผ ๊ฐ™์ด paramiko ๋‚ด์—์„œ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ paramiko ํ”„๋กœ์ ํŠธ์˜ ๋ฌธ์ œ๋กœ ๋” ์ ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰