2011-11-24 3 views
5

저는 파이썬과 프로그래밍에있어서 매우 익숙합니다. 파이썬 스크립트를 통해 두 컴퓨터간에 파일을 복사하려고합니다. 그러나 코드파이썬에서 scp와 os 모듈을 통해 원격 서버에서 파일 복사하기

os.system("ssh " + hostname + " scp " + filepath + " " + user + "@" + localhost + ":" cwd) 

은 작동하지 않습니다. 나는 그것이 How to copy a file to a remote server in Python using SCP or SSH?에서 설명한대로 암호가 필요하다고 생각합니다. 나는 어떤 에러 로그도 얻지 못했고, 파일은 단지 나의 현재 작업 디렉토리에 나타나지 않을 것이다.

그러나 다른 모든 명령은 os.system("ssh " + hostname + "command") 또는 os.popen("ssh " + hostname + "command")입니다. ->command = e.g. ls

내가 암호를 입력하지 않고 작동 명령 줄에서 ssh hostname scp file [email protected]:directory 을 시도합니다.

내가 (I은 쉽게 명령을 테스트) 원격 서버에 SSH 연결을 설정하는 데 getpass와 pxssh 모듈 os.popen 명령을 결합하고 직접 명령을 전송하는 데 사용하려 :

import pxssh 
import getpass 

ssh = pxssh.pxssh() 
ssh.force_password = True 
hostname = raw_input("Hostname: ") 
user = raw_input("Username: ") 
password = getpass.getpass("Password: ") 
ssh.login(hostname, user, password) 
test = os.popen("hostname") 
print test 

그러나 원격 서버에 명령을 입력 할 수 없습니다 (print test show, 해당 호스트 이름 = 로컬 및 원격 서버가 아님). 연결은 확실합니다. 나는 bash 명령에서 항상 "ssh " + hostname을 사용하는 것보다 연결을 설정하는 것이 더 쉽다고 생각했다. 나는 또한 How to copy a file to a remote server in Python using SCP or SSH?에있는 몇 가지 해결 방법을 시도했지만, 나는 그들에게 일하게하지 않은 만기의 부족으로 인정해야합니다.

나를 도와 주셔서 감사합니다.

+2

왜 당신을 'ssh hostname scp'을 할 필요가 있다고 생각하십니까? 왜'scp user @ hostname : file localdirect'가 아닌가? –

+0

보안상의 이유로'os.system()'에 비해'subprocess' 모듈을 선호합니다. – glglgl

+0

'scp user @ hostname : file localdirectory'를 통해 복사 할 가능성에 대해서는 생각하지 않았습니다. 작동하지만,'user @'부분을 취소 할 때만 작동합니다. – user1063572

답변

3

가장 쉬운 방법은 암호를 입력하지 않아도되고 가장 안전한 방법은 먼저 public/private key authentication을 설정하는 것입니다. 그 완료, 당신은 ssh [email protected]를 수행하여 원격 시스템에 로그인 할 수있게되면, 다음과 같은 bash는 명령이 트릭을 할 것입니다 :

scp some/complete/path/to/file [email protected]_system:some/remote/path 

는 해당 파이썬 코드는 다음과 같습니다

import subprocess 

filepath = "some/complete/path/to/file" 
hostname = "[email protected]_system" 
remote_path = "some/remote/path" 

subprocess.call(['scp', filepath, ':'.join([hostname,remote_path])]) 
관련 문제