【问题标题】:Python Paramiko scp.get() errorPython Paramiko scp.get() 错误
【发布时间】:2020-04-15 19:37:45
【问题描述】:

我想要做的是使用this 模块与 paramiko 进行 scp。我已成功 ssh,并使用 put() 方法将文件 发送到 远程位置。当我尝试使用 get() 方法从该位置 scp 文件 from 时,我的问题出现了。它给了我这个错误:

scp.SCPException: scp: user@flibbertygibbit.com:/home/username/myfile: No such file or directory

问题在于该路径确实存在。

以下是相关代码:

def download(file):
    scp = SCPClient(ssh.get_transport())
    scp.get('/home/{0}/{1}'.format(user.get(),file), 'C:\\Users\\Me\\Desktop')`

user.get() 引用包含我的用户名的 tkinter StringVar,file 是文件名。

Here 是整个代码,减去个人详细信息,以防万一。

ls -ld /home/username/myfile 的输出:

-rw-rw-r-- 1 username username 145 Dec 1 13:50 /home/username/job.alf

scp user@flibbertygibbit.com:/home/username/myfile .的输出:

C:\Users\Me>scp user@flibbertygibbit.com:/home/username/myfile .
Password:
myfile                                       100%  145     0.1KB/s   00:00

非常感谢任何可以帮助我弄清楚为什么会发生这种情况的人。

【问题讨论】:

  • 有什么问题? 1) /home/myfile 是正确的现有路径,而 SCP 在不应该发生的情况下失败。 2)或者'/home/{0}/{1}'.format(user.get(),file)应该产生不同的路径(不是/home/myfile)?
  • 问题是 /home/myfile 是正确的路径,它存在于远程服务器上,但是 scp 操作错误。它肯定是通过了正确的路径,只是由于某种原因无法正常工作。
  • 嗯,对我来说,'/home/{0}/{1}'.format(user.get(),file) 看起来像是获得类似 /home/username/myfile 的路径的一种方式(对我来说实际上看起来是正确的路径,而不仅仅是 /home/myfile)。
  • 好的,完成更多测试。该错误现在将它认为不存在的路径输出为 /home/username/myfile 并且仍然错误。我已经三重检查了,而且绝对可以 100% 确定,得到了一条非常真实的路径。
  • 1) .put 成功使用了哪些路径? 2) 下载是否与命令行scp 客户端一起使用? 3)当你SSH到服务器时,pwd命令输出什么? ls -ld /home/username/myfile 输出什么?

标签: python ssh scp paramiko


【解决方案1】:

正如错误所说,它试图从不存在的路径中检索文件。我建议使用 os 模块。

import os
os.getlogin()

这将返回当前用户。

【讨论】:

  • 对不起,应该更清楚——路径确实存在。这就是为什么我很困惑。您能否解释一下 os 模块在这种情况下有何帮助?
【解决方案2】:

我想重新打开这个案例,因为我面临同样的问题。 我可以复制 A=>B 但不能复制 B=>A。失败只发生在 python 中,而 bash 中的 scp 在两个方向都可以正常工作。

编辑: scp.put()解决了问题

【讨论】: