2017-11-20 4 views
0

Windows 컴퓨터에서 파이썬의 서브 프로세스 모듈을 사용하여 유닉스 박스에 연결하려고합니다. 엄격히 말하면 서브 프로세스 모듈 (plz 내 지식에 따라 유닉스에 연결하는 창에서 그들을 실행할 수 없습니다 pexpect, paramiko 제안도 환경 restrictitons) 여기 내 코드는 내가 시도하고 난 항상 암호 프롬프트로 대화 형 키보드 인증 메시지 : 나는 보내려고 해당 프롬프트에 대한 암호는 있지만 그렇게 할 수는 없습니다. 명령 나던 작품 -pw 사용파이썬을 사용하는 Windows에서 SSH를 사용하여 유닉스 박스에 로그인하는 동안 서브 프로세스를 사용하여 암호를 보낼 수 있습니까?

import subprocess 
cmd='plink -ssh [email protected] -pw password' 
sp=subprocess.Popen(cmd,stdin=subprocess.pipe,stdout=subprocess.pipe,shell=False) 
sp.stdin.write('password \n') 
sp.stdin.flush() 
error,out=sp.communicate 
print error 
print out 

는 콘솔에 stdin.write 위해 노력했다, (시간 - -pw 옵션 또는 stdin.write 중 하나를 사용했다)뿐만 아니라 그렇게 할 수 없었다. 또한

+0

Windows에서 실행하고 환경 제한을 초래하지 않는 다른 제안을 기꺼이 기꺼이 받아 들일 의향이 있습니까? –

+0

사실,'shell = False'는 (A) Windows에서는 무시됩니다. (B) 명령을 'Popen'에 단일 문자열로 전달할 때 원하는 플래그가 아닙니다. –

+0

@MadPhysicist 예. 나는이 메시지를받지 않고 유닉스 박스에 연결할 수있는 파이썬 내부 모듈을 사용하는 제안에 개방되어있다. 암호가없는 로그인을하기 위해 비공개 키를 사용하는 옵션을 사용하지 않는다는 것을 유의한다. –

답변

0

이것은 FreeBSD의 하나에 연결하는 내 Windows 상자에 잘 작동 창에 존재하는 밤은 termios의를 필요로 pexpect, 너무 내 실행 환경에 몇 가지 제한이 있습니다

>>> import subprocess 
>>> cmd = r'c:\path\to\plink -ssh [email protected] -pw pass' 
>>> p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, 
      stderr=subprocess.PIPE) 
>>> p.stdin.write(b'ls -al\nexit\n') 
12 
>>> p.stdin.flush() 
>>> err = p.stderr.read() 
>>> out = p.stdout.read() 
>>> print(err) 
b'Using username "user".\r\n' 
>>> print(out.decode()) 
Last login: Mon Nov 20 17:16:18 2017 from xxx 
... remaining of login message 
$ ls -al 
total 240 
... listing of home directory 
$ exit 

user, passmachine을해야 자신의 리눅스 또는 유닉스 박스에 따라 설정하십시오 ...

+0

에서 더 자세히 설명합니다. 두 번째 상자에서 -pw 하나의 유닉스 상자를 사용할 수 있습니다. 그것을 사용하지 못하며 나를 암호 : 프롬프트로 되 돌린다. 하나의 상자에서 -pw를 허용하고 다른 대화 상자에서 '대화식 키보드 인증 passsword :'를 허용하는 설정이 있는지 확실하지 않은 경우 –

+0

유닉스 상자에서 출력을 받아들이고 출력을 기준으로 암호를 입력 할 수있는 방법이 있습니까? sp.stdin.write ('Password')'code' –

+0

@ c-vang : 문제가 발생할 가능성이 있습니다. 서버 측이어야합니다.대화 형 키보드 인증을 거부하고 키 기반 인증 만 수락하도록 sshd 데몬을 구성 할 수 있습니다. 두 번째 상자에 연결할 수 있다면 cmd 창에서 대화식으로 테스트해야합니다. 2/sysadmin에게 자세한 내용을 문의하십시오. 하지만 내가 추측 할 수없는 것이 두렵다. –