【问题标题】:IOError: [Errno 2] No such file when using Paramiko in Python to upload file over SSHIOError: [Errno 2] 在 Python 中使用 Paramiko 通过 SSH 上传文件时没有此类文件
【发布时间】:2018-01-21 22:11:23
【问题描述】:

几年前有人问过这个问题,但看起来它来来回回了一段时间,没有一个明确的答案。这个问题在这里供参考: IOError: [Errno 2] No such file - Paramiko put()

基本上,我正在尝试运行 Python 脚本(使用 Paramiko)以通过 SSH 上传文件。我尝试了几种不同的方法,包括将 URL 更改为我的本地文件,使其成为绝对路径而不是相对路径,但我总是收到“IOERROR: [Errno2] No such file error 不管我做什么。这是我的代码:

import os
import paramiko

server = "sample_server.net"
ssh = paramiko.SSHClient()
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", 
"known_hosts")))
ssh.connect(server, username="cb", password="pass")
sftp = ssh.open_sftp()
sftp.put("test_upload.xml", "/home/sample/root/cb")
sftp.close()
ssh.close()

之前有没有人遇到过这个问题或者对问题可能有任何线索?我绝对确定该文件确实退出了,所以我不确定为什么找不到它。谢谢。

【问题讨论】:

  • 尝试使用完整路径。
  • 如果你在.put之前输入os.path.isfile("test_upload.xml"),你会得到true吗?

标签: python-2.7 paramiko


【解决方案1】:

尝试在 remotepath 参数中添加文件名。来自 put 的 API 文档:

remotepath (str) – SFTP 服务器上的目标路径。注意文件名应包含在内。仅指定目录可能会导致错误。”

http://docs.paramiko.org/en/2.4/api/sftp.html#paramiko.sftp_client.SFTPClient

import os
import paramiko

server = "sample_server.net"
ssh = paramiko.SSHClient()
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(server, username="cb", password="pass")
sftp = ssh.open_sftp()
sftp.put("test_upload.xml", "/home/sample/root/cb/test_upload.xml")
sftp.close()
ssh.close()

这样做对我有用。

【讨论】: