使用 Python 通过 SSH 下载文件

Download files over SSH using Python

我正在尝试制作一个通过 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: Failure",有人可以帮忙吗?

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

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())

刚刚修改了目标路径以包含文件名作为 well.Try 进行更改。

remotepath = '/opt/crestelsetup/patchzip'

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

您需要修改远程路径。因为,您的远程路径是 /opt/crestelsetup/patchzip。现在需要上传文件加入远程路径。可以通过以下方式完成。

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