使用 Python 中的 Paramiko 从远程命令列出的 SFTP 服务器下载文件

Yu Ni

我正在使用 Paramiko 从我的本地机器连接到 SFTP 服务器并从远程路径下载 txt 文件。我能够成功连接,也可以打印远程路径和文件,但我无法在本地获取文件。我可以打印file_pathfile_name,但无法下载的所有文件。下面是我正在使用的代码:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname=hostname, username=username, password=password, port=port)

remotepath = '/home/blahblah'
pattern = '"*.txt"'
stdin,stdout,stderr = ssh.exec_command("find {remotepath} -name {pattern}".format(remotepath=remotepath, pattern=pattern))
ftp = ssh.open_sftp()
for file_path in stdout.readlines():
   file_name = file_path.split('/')[-1]
   print(file_path)
   print(file_name)
   ftp.get(file_path, "/home/mylocalpath/{file_name}".format(file_name=file_name))

我可以语句中看到下面file_pathfile_name喜欢的内容,print但是在对多个文件使用 ftp.get 时出错。我可以通过在源和目标上硬编码名称来复制单个文件。

file_path = '/home/blahblah/abc.txt'
file_name = 'abc.txt'
file_path = '/home/blahblah/def.txt'
file_name = 'def.txt'

我看到下载了一个文件,然后出现以下错误:

FileNotFoundErrorTraceback(最近一次调用最后一次)

错误跟踪:

Traceback (most recent call last):  
File "<stdin>", line 1, in <module>
File "...anaconda3/lib/python3.6/site-packages/paramiko/sftp_client.py", line 769, in get
  with open(localpath, 'wb') as fl:
FileNotFoundError: [Errno 2] No such file or directory: 'localpath/abc.txt\n'
马丁·普里克里尔

readlines不会从行中删除换行符。因此,正如您在回溯中看到的,您正在尝试创建一个名为 的文件abc.txt\n,这在许多文件系统上是不可能的,而且主要不是您想要的。

修剪尾随的新行file_path

for file_path in stdout.readlines():
    file_path = file_path.rstrip()
    file_name = file_path.split('/')[-1]
    # ...

虽然您会为自己省去很多麻烦,但如果您使用纯 SFTP 解决方案,而不是通过执行远程find命令来破解它(这是一个非常脆弱的解决方案,正如@CharlesDuffy 在评论中所暗示的那样)。

请参阅使用 Paramiko 在 Python 中匹配通配符的 SFTP 服务器上的列表文件


旁注:不要使用AutoAddPolicy. 这样做你会失去安全感。请参阅Paramiko“未知服务器”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Paramiko在SFTP服务器上列出与Python中的通配符匹配的文件

无法使用python从sftp服务器下载文件

SFTP:从远程服务器递归复制/下载文件夹中的所有文件

使用Python Paramiko从SFTP服务器读取.csv文件到内存

使用 Python Paramiko 将所有文件从本地目录上传到 SFTP 服务器

使用“ for”命令在PSFTP中的SFTP服务器上查找并下载最新文件

将下载文件的MD5与Python中SFTP服务器上的文件进行比较

不使用 JSch 从 SFTP 服务器下载文件

使用JSch从SFTP服务器下载文件

使用PowerShell从SFTP服务器下载文件

如何使用Paramiko getfo将文件从SFTP服务器下载到内存以进行处理

如何使用Paramiko从SFTP服务器仅下载最新文件?

尝试在 Python 中的 Paramiko 的 sftp 客户端上使用文件方法时出现未知类型错误

使用Python Paramiko / pysftp检查SFTP服务器上的文件是否为符号链接,并删除该符号链接

直接从SFTP服务器将音频文件加载到Python的语音识别模块(使用Paramiko SFTPClient)

python paramiko在使用sftp的Windows服务器上给出错误“权限被拒绝[Errno 13]”

使用Python Paramiko在不同的SSH服务器中并行运行多个命令

服务通过Flam中的Paramiko SFTP下载的文件

使用ASP MVC从远程服务器下载文件

使用PowerShell中的WinSCP .NET程序集从FTP / SFTP服务器上的文件夹集中下载文件和电子邮件结果

使用 Python Paramiko 在远程服务器上执行的脚本无法读取/访问本地文件

使用Paramiko更改SFTP服务器上的目录

使用Python从SFTP服务器下载时不要下载空文件夹

Python-通过PHP使用Paramiko的SFTP

使用libssh从SFTP服务器下载文件,然后使用C ++将其写入ofstream?

如何使用SCP或SSH将完整目录递归复制到Python(paramiko)中的远程服务器?

使用通配符和循环从 sftp 服务器下载文件

使用Python Paramiko通过ssh / sftp将文件复制到具有不同文件名的服务器

使用Python Paramiko对SFTP服务器进行两因素(按键和键盘交互)身份验证