2013-03-07 4 views
2

paramiko python 모듈 "find"와 "scp"에서 두 개의 명령을 사용하고 있습니다. 찾기 명령이 올바르게 작동하고 올바른 출력을 제공하지만 scp가 출력을 제공하지 않습니다. 나는 다음 코드를 시도 :paramiko에서 scp 명령을 사용하는 방법

import paramiko 

class SSH: 

    def ssh_Connection(self): 
     try: 
      self.ssh = paramiko.SSHClient() 
      self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
      self.ssh.connect('host_name',username='user',password='pass') 

     except Exception, e: 
      print "================================================" 
      print 'ERROR: Remote connection failed with %s' % e 
      print "================================================" 


    def ssh_Commands(self): 
     try: 
      stdin, stdout, stderr = self.ssh.exec_command('find /result/main/ -name "*new.txt*"') 
      for line in stdout: 
       a = line.strip('\n') 
       print a 
       if a: 
        cmd = 'scp -r %s [email protected]:/results/main/' % a 
        print cmd 
        stdin, stdout, stderr = self.ssh.exec_command(cmd) 
        print stdout.read() 
        print stderr.read() 

      self.ssh.close() 
     except Exception, e: 
      print "================================================" 
      print 'ERROR: Commands Execution failed with %s' % e 
      print "================================================" 


if __name__ == "__main__": 
    a = SSH() 
    a.ssh_Connection() 
    a.ssh_Commands() 

하지만이 프로그램은 ...

Throwing an error: 
Host key verification failed. 
lost connection 

어떻게 paramiko에 scp를 사용할 수 있습니다 .. 나를 위해 어떤 생각을 작동하지?

답변

1

명령을 수행하는 서버 (host_name)에 scp로 보내려는 서버 (192.168.56.32)에 대한 적절한 SSH 액세스가 없으므로 오류 Host key verification failed을 생성합니다 (즉, known_hosts 파일의 192.168.56.32에 대한 호스트 키가 host_name 인 경우 192.168.56.32가 반환하는 키와 일치하지 않습니다.

어느 호스트 키를 수정하거나 같은 SCP를 실행 해보십시오 :

scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -r %s ... 

(또한, 파일 이름에 공백이 포함 된 경우, 귀하의 scp 명령이 실패합니다 점에 유의 대신 scp 명령 행에 "%s" 사용) .

+0

scp -o UserKnownHostsFile =/dev/null -o StrictHostKeyChecking = no -r % s [email protected]을 사용하여 'scp -r % s [email protected] :/results/main /'% a를 대체했습니다. 56.32 :/results/main/'% a 아무 것도 표시하지 않고, find 명령 출력도 표시하지 않습니다. –

+0

'host_name'에 sshing을 시도하고 수동으로 명령을 수행하여 작동하는지 확인하십시오. – robertklep

+0

에 1을 표시 경고 : 알려진 호스트 목록에 영구적으로 '192.168.56.32'(RSA)가 추가되었습니다. –

2

paramiko의 SFTPClient을 사용하여 로컬 서버에서 원격 서버로 파일을 복사 할 수 있습니다.

로컬 파일을 원격 서버에 복사하는 SFTPClient의 입력 방법이 있습니다.

+1

+1이 솔루션은 이식성이 뛰어나며 paramiko 클라이언트가 Windows에서 실행 되더라도 작동합니다. 나는 그것을 사용하여 파일을 검색 할 것이지만,'find'는 지역적으로 작동하고 더 빠릅니다. – Ellioh

+0

어떻게 new.txt를 찾을 수 있습니까? –

+0

SFTPClient가 작동 중입니다 ...하지만 어떻게 파일을 찾고 다운로드 할 수 있습니까? SFTPClient에 대한 다른 연결을 만들고 싶지 않습니다. –

관련 문제