使用Python通过SSH下载文件

时间:2015-04-08 07:41:19

标签: python ssh

我正在尝试制作一个脚本,通过ssh下载(或上传)文件,因为从防火墙禁用了ftp端口。这是我的剧本:

import os
import paramiko 
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.170.21.93', username="abhishek", password="@bhishek$")
sftp = ssh.open_sftp()
localpath = 'abc.txt'
remotepath = '/opt/crestelsetup/patchzip'
sftp.put(localpath, remotepath)
sftp.close()
ssh.close()

这给了我" IOError:失败",任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:8)

您需要明确指定远程路径:

import os
import paramiko 
ssh = paramiko.SSHClient()
ssh.connect('10.170.21.93', username="abhishek", password="@bhishek$")
sftp = ssh.open_sftp()
localpath = 'abc.txt'
remotepath = '/opt/crestelsetup/patchzip/abc.txt'
sftp.put(localpath, remotepath)
sftp.close()
ssh.close()

根据Martin Prikryl的评论,以下代码行非常气馁,因为它会在中间攻击中打开你,但是,它可以是缺少主机密钥的临时修复

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

答案 1 :(得分:1)

刚刚修改了目标路径以包含文件名。请尝试更改。

remotepath = '/opt/crestelsetup/patchzip'

remotepath = '/opt/crestelsetup/patchzip/abc.txt'

答案 2 :(得分:-1)

您需要修改remotepath。因为,您的远程路径是/opt/crestelsetup/patchzip。现在需要上传带有远程路径的文件联接。可以使用以下方法完成。

fname = os.path.basename(localpath)
sftp.put(localpath, os.path.join(remotepath, fname))