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

问题描述 投票:0回答:4

尝试在 paramiko 中使用 sftp 从 Windows 服务器下载一些文件。获取方法是:

def get(self, remotepath, localpath = None):
    """Copies a file between the remote host and the local host."""
    if not localpath:
        localpath = os.path.split(remotepath)[1]
    self._sftp_connect()
    self._sftp.get(remotepath, localpath)

运行脚本时

sshObj.get('C:\\my_file.txt', 'D:\\python\\')
,它会抛出错误:

 File "C:\Py34\lib\site-packages\paramiko\sftp_client.py", line 806, in _convert_status
raise IOError(errno.EACCES, text)`PermissionError: [Errno 13] **Permission denied**`

我已授予该文件夹所有权限。 还与其他用户分享。但错误仍然存在。如果有人以前遇到过这个问题,任何线索都会有所帮助。

注意:我安装了 freesshd 以使我的本地盒子成为 ssh 服务器。

python windows sftp paramiko
4个回答
17
投票

这与路径命名约定无关。 在本地路径中,您没有提到文件名,您只是提到了保存文件的目录。 使用:

sshObj.get('C:\\my_file.txt', 'D:\\python\\my_file.txt')
代替
sshObj.get('C:\\my_file.txt', 'D:\\python\\')


4
投票

谢谢大家! 最后我找到了答案。 这是因为文件路径的格式。

尝试

sshObj.get("/remote_file.txt","C:/tmp/local_file.txt")
成功,没有任何错误。

下载winSCP工具,它有一个很好的GUI,可以帮助您正确理解文件路径的格式。

还要检查远程计算机上的基本 SFTP 文件夹,因为在我的情况下,抛出错误是因为

remote_file.txt
不位于远程机器上的根 sftp 文件夹(可以手动配置)。


1
投票

当您设置好 freesshd 后,您想要获取的文件应该位于 freesshd 服务的主目录中。我想远程路径应该类似于

/path/to/file

根据您的代码片段,您想从

c:\\my_file.txt
获取文件。至少有两个问题:

  1. 类 POSIX 文件系统使用
    /
    并且没有驱动器路径。
    C:\
    永远不会起作用。
  2. 您的 freessdh 可以访问
    C:\
    吗?我有疑问。

0
投票

就我而言,我在运行

put
功能时收到错误,该错误是由 SFTP 服务器中已存在的文件引起的。 在发送文件之前,您最好用
sftp.listdir(path)
检查文件是否存在

© www.soinside.com 2019 - 2024. All rights reserved.