2017-10-02 21 views
2

로컬 시스템에서 우분투에서 실행중인 Python 프로그램이 있습니다. 프로그램을 실행하는 동안 우분투와 실행중인 다른 두 개의 원격 컴퓨터에 연결됩니다. 이 컴퓨터에 연결할 IP 주소, 이름 및 암호가 있습니다. 로컬 시스템은 원격 시스템에 명령을 보내고 원격 시스템은 응답을 보냅니다. 지금 당장 나는 원격 컴퓨터가 로컬 컴퓨터로 'hello'를 다시 보내도록하려고 시도하고 있습니다. 나는 원격 내 로컬 컴퓨터에서 명령 행에서이 기계 모두에 사용 할 수 있습니다원격에서 Windows에 우분투 연결

sshpass -p password ssh -X [email protected] 

비밀번호, 이름하고, 여기서 ipaddress가 제대로 각 시스템으로 채워됩니다. 그래서 저는 두 컴퓨터 모두에 원격으로 연결할 수 있다는 것을 알고 있습니다. 거기에서 나는 그 기계에 로컬로있는 것처럼 모든 명령을 실행할 수 있습니다.

그러나 간단하게 echo 'hello' 명령을 보내는 동안 내 프로그램에서이 작업을 수행하고 싶습니다. 나는 성공적으로 다음과 원격 우분투 서버에이 작업을 수행 할 수 있습니다

from subprocess import Popen, PIPE 
cmd = ["sshpass", "-p", password, "ssh", "-X", name+"@"+ipaddress, "echo 'hello'"] 
ssh = Popen(cmd, stdout=PIPE, stderr=PIPE) 
print ssh.stdout.readlines() 

암호, 이름여기서 ipaddress 이미이 점에 의해 정의되는 변수입니다. 이것은 다음과 같은 목록을 반환 우분투 원격 서버에서 작동 :

['hello\n'] 

이 좋은,하지만 Windows 서버에서 동일한하려고 할 때 빈 목록을 얻을 : 나는 '

[] 

을 여러 가지 명령을 시도하고 항상 빈 목록을 얻습니다. Windows 서버에 연결할 때 수행해야 할 다른 것이 있습니까? 미리 감사드립니다.

나는 표준 에러를 보았고, 그 다음 목록을 포함

['X11 forwarding request failed on channel 0\r\n', 'exec request failed on channel 0\r\n'] 

나는 -X 태그를 포함하지 않는 경우 그때에만 두 번째 오류 얻을 :

['exec request failed on channel 0\r\n'] 

답변

0

대상을 컴퓨터에는 명령과 같은 Linux가 설치되어 있지 않을 가능성이 높습니다. Windows 컴퓨터에 Cygwin과 같은 것을 설치하십시오.

+0

고마워,하지만 문제는 명령 줄에 명령을 직접 입력하면 Windows 서버에서 응답을받을 수 있지만, Python 스크립트에서 프로세스를 자동화하려고하면 ' 응답을 얻지 못한다. 그러나 Ubuntu에서 Ubuntu로 연결하면 아무런 문제가 없습니다. – MCSquared78