Python 如何在paramiko中使用scp命令
我在paramikopython模块“find”和“scp”中使用了两个命令。 Find命令工作正常,并给出正确的输出,但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
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
命令并获取输出。从该输出下载这些文件。