【问题标题】:sftp issues using pysftp使用 pysftp 的 sftp 问题
【发布时间】:2023-03-19 12:30:02
【问题描述】:

我正在尝试使用 pysftp 通过 sftp 将文件从本地机器发送到服务器

当我使用命令行登录服务器时:

sftp -o port=111 user_name@host

然后执行pwd 我得到/ 作为当前位置

所以我想在pysftp 中做同样的事情:

import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

with pysftp.Connection("host", username="user_name", password="password", port=111, cnopts=cnopts) as sftp:
    print(sftp.pwd)
    sftp.put(local_file, sftp.pwd)

但我收到错误IOError: [Errno 13] Permission denied

虽然,我可以在命令行中使用相同的凭据和像 FileZilla 这样的 ftp 客户端进行 sftp

这里是完整的错误跟踪:

traceback (most recent call last):
  File "C:/workspace/segments-upload/media_math_segments_upload.py", line 232, in <module>
    sys.exit(0 if main() else 1)
  File "C:/workspace/segments-upload/media_math_segments_upload.py", line 226, in main
    process(s3_bucket, s3_dir, sftp_host, sftp_path, sftp_user_name, sftp_password, sftp_port)
  File "C:/workspace/segments-upload/media_math_segments_upload.py", line 182, in process
    sftp_file(local_file, sftp_host, sftp_path, sftp_user_name, sftp_password, sftp_port)
  File "C:/workspace/segments-upload/media_math_segments_upload.py", line 105, in sftp_file
    sftp.put(local_file, sftp.pwd)
  File "C:\Users\tkaghdo\AppData\Local\Continuum\Anaconda2\lib\site-packages\pysftp\__init__.py", line 364, in put
    confirm=confirm)
  File "C:\Users\tkaghdo\AppData\Local\Continuum\Anaconda2\lib\site-packages\paramiko\sftp_client.py", line 676, in put
    return self.putfo(fl, remotepath, file_size, callback, confirm)
  File "C:\Users\tkaghdo\AppData\Local\Continuum\Anaconda2\lib\site-packages\paramiko\sftp_client.py", line 634, in putfo
    with self.file(remotepath, 'wb') as fr:
  File "C:\Users\tkaghdo\AppData\Local\Continuum\Anaconda2\lib\site-packages\paramiko\sftp_client.py", line 327, in open
    t, msg = self._request(CMD_OPEN, filename, imode, attrblock)
  File "C:\Users\tkaghdo\AppData\Local\Continuum\Anaconda2\lib\site-packages\paramiko\sftp_client.py", line 730, in _request
    return self._read_response(num)
  File "C:\Users\tkaghdo\AppData\Local\Continuum\Anaconda2\lib\site-packages\paramiko\sftp_client.py", line 781, in _read_response
    self._convert_status(msg)
  File "C:\Users\tkaghdo\AppData\Local\Continuum\Anaconda2\lib\site-packages\paramiko\sftp_client.py", line 809, in _convert_status
    raise IOError(errno.EACCES, text)
IOError: [Errno 13] Permission denied

【问题讨论】:

  • 完整的堆栈跟踪会很有帮助。知道它是一个 IOError 并不能真正帮助了解 哪个 操作失败,以及它是本地表示的远程异常还是本地系统调用失败。

标签: python sftp


【解决方案1】:

通过提供远程服务器上的文件名解决了该问题。所以我只是改变了

sftp.put(local_file, sftp.pwd)

sftp.put(local_file, "file_name.dat")

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多