Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在paramiko中使用scp命令_Python_Scp_Paramiko - Fatal编程技术网

Python 如何在paramiko中使用scp命令

Python 如何在paramiko中使用scp命令,python,scp,paramiko,Python,Scp,Paramiko,我在paramikopython模块“find”和“scp”中使用了两个命令。 Find命令工作正常,并给出正确的输出,但scp没有给出任何输出。 我尝试了以下代码: import paramiko class SSH: def ssh_Connection(self): try: self.ssh = paramiko.SSHClient() self.ssh.set_missing_host_key_policy(p

我在paramikopython模块“find”和“scp”中使用了两个命令。 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…有什么想法吗?

您正在执行命令的服务器(
host\u name
)没有正确的SSH访问权限,无法访问您试图scp到的服务器(192.168.56.32),这就是为什么它生成错误
主机密钥验证失败的原因。
(这意味着
host\u name
上的
known\u hosts
文件中192.168.56.32的主机密钥与192.168.56.32返回的密钥不匹配)

请修复主机密钥,或尝试按如下方式运行scp:

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

(还要注意,如果文件名包含空格,则scp命令将失败,请改用scp命令行上的
“%s”

您可以使用paramiko的
SFTPClient
将文件从本地复制到远程服务器


有一个put方法,其中的将本地文件复制到远程服务器。

我已替换了“scp-r%s”redhat@192.168.56.32:/results/main/'%a with'scp-o UserKnownHostsFile=/dev/null-o StrictHostKeyChecking=no-r%sredhat@192.168.56.32:/results/main/'%a它没有显示任何内容,甚至没有显示我的“查找”命令输出。请尝试将其搜索到
host_name
并手动执行该命令以查看是否有效。显示一条警告:永久添加了“192.168.56.32”(RSA)到已知主机的列表。这没关系,尽管这表明从未从脚本中调用scp命令。不确定原因,从这里进行调试非常困难。确保使用与脚本完全相同的变量:相同的用户、密码等。每件事情都是一样的,但不知道它为什么不起作用…我尝试使用SFTPClient,我可以下载该文件,但如何查找文件是一个问题+1此解决方案似乎更具可移植性,即使paramiko客户端在Windows上运行,它也会工作。我甚至会使用它搜索文件,但
find
在本地工作且速度更快。我尝试了SFTPClient它正在工作…但我们如何找到该文件并下载它?我没有要为SFTPClient创建另一个连接,您可以在远程服务器上调用
find-type f-name new.txt
命令并获取输出。从该输出下载这些文件。