python: subprocess.Popen(["ssh", 연결할 수 없습니다.

python: subprocess.Popen(["ssh", 연결할 수 없습니다.

다음은 Python3에서 테스트한 코드 조각입니다.

ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
                   shell=False,
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)

그리고

subprocess.Popen(['ssh', "me" + '@' + 123.45.67.891, '-p', "22"]

실행하면 비밀번호를 계속해서 묻습니다.

Password:
Password:
Password:

연결을 테스트했는데 작동합니다.

ssh [email protected] "uname -a"

참고: 간단한 작업을 위해 더 많은 라이브러리를 설치하지 마십시오.

편집: 전체 코드는 다음과 같습니다.

#!/usr/bin/python3
import subprocess
import sys

HOST="123.45.67.891"
# Ports are handled in ~/.ssh/config since we use OpenSSH
COMMAND="uname -a"

ssh = subprocess.run(["ssh", "123.45.67.891", "uname -a"],
                    shell=False,
                    stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE,
                    check=False)

result = ssh.stdout.readlines()
if result == []:
 error = ssh.stderr.readlines()
 print >>sys.stderr, "ERROR: %s" % error
else:
 print (result)

EDIT2: cntl-C를 실행하면 다음과 같은 결과가 나타납니다.

Password: Traceback (most recent call last):
File "./sshtest2.py", line 13, in <module>
check=False)
File "/usr/lib/python3.6/subprocess.py", line 405, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib/python3.6/subprocess.py", line 843, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib/python3.6/subprocess.py", line 1514, in _communicate
ready = selector.select(timeout)
File "/usr/lib/python3.6/selectors.py", line 376, in select
fd_event_list = self._poll.poll(timeout)
KeyboardInterrupt

관련 정보