python paramiko在使用sftp的Windows服务器上给出错误“Permission denied [Errno 13]”

时间:2015-02-24 21:49:25

标签: python windows sftp paramiko

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

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,使我的localbox成为ssh服务器。

3 个答案:

答案 0 :(得分:5)

它与路径命名约定无关。 在本地路径中,您没有提到文件名,您刚刚提到了保存文件的目录。 使用: sshObj.get('C:\\my_file.txt', 'D:\\python\\my_file.txt') 代替 sshObj.get('C:\\my_file.txt', 'D:\\python\\')

答案 1 :(得分:3)

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

在尝试sshObj.get("/remote_file.txt","C:/tmp/local_file.txt")时,它成功了,没有任何错误。

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

同时检查远程计算机上的基本SFTP文件夹,因为在我的情况下引发了错误,因为remote_file.txt未位于远程盒上的根sftp文件夹(可以手动配置)上。

答案 2 :(得分:1)

在设置freesshd时,您要获取的文件应位于freesshd所在的主目录中。我想远程路径应该是/path/to/file

根据您的代码段,您希望从c:\\my_file.txt获取文件。至少有两个问题:

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