2

paramiko pythonモジュールで「find」と「scp」の2つのコマンドを使用しています。Find コマンドは正常に機能し、正しい出力が得られますが、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 redhat@192.168.56.32:/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を使用するにはどうすればよいですか...何か考えはありますか?

4

2 に答える 2

2

paramiko を使用SFTPClientして、ローカル サーバーからリモート サーバーにファイルをコピーできます。

ローカル ファイルをリモート サーバーにコピーするSFTPClientの put メソッドがあります。

于 2013-03-07T06:56:40.630 に答える
1

コマンドを実行しているサーバー ( host_name) には、scp しようとしているサーバー (192.168.56.32) への適切な SSH アクセスがありません。そのため、エラーが生成されますHost key verification failed(つまり、192.168.56.32 のホスト キーが上のknown_hostsファイルhost_nameの 192.168.56.32 が返すキーと一致しません)。

ホスト キーを修正するか、次のように scp を実行してみてください。

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

(また、ファイル名にスペースが含まれていると、scp コマンドが失敗することに注意"%s"してください。代わりに、scp コマンド ラインで使用してください)。

于 2013-03-07T06:51:53.443 に答える