2013-03-07 84 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)沒有正確的SSH訪問您嘗試scp的服務器(192.168.56.32),這就是爲什麼它會生成錯誤Host key verification failed(這意味着host_name上的known_hosts文件中的192.168.56.32的主機密鑰與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命令輸出。 – 2013-03-07 07:18:34

+0

嘗試sshing到'host_name'並手動執行該命令以查看它是否工作。 – robertklep 2013-03-07 07:30:26

+0

顯示一個警告:將「192.168.56.32」(RSA)永久添加到已知主機列表中。 – 2013-03-07 08:57:06

2

您可以使用paramiko的SFTPClient將文件從本地複製到遠程服務器。

SFTPClient的put方法會將本地文件複製到遠程服務器。

+1

+1此解決方案看起來更具可移植性,即使paramiko客戶端在Windows上運行,它也能工作。我甚至會用它來搜索文件,但'find'在本地工作,速度更快。 – Ellioh 2013-03-07 07:22:19

+0

我怎麼找到new.txt ... – 2013-03-07 07:30:22

+0

我試過SFTPClient它工作...但我們如何找到該文件,然後下載它?我不想爲SFTPClient創建另一個連接 – 2013-03-07 09:28:48