Ошибки загрузки Paramiko [Errno 2]

Я пытаюсь создать скрипт на python, который будет загружать CSV на sftp-сервер поставщика. Получив слишком много ошибок при попытке использовать pysftp, я попытался использовать Paramiko и продвинулся дальше, но теперь я застрял на фактической части загрузки. При попытке загрузки пишет

  File "C:\Users\me\PycharmProjects\pythonProject1\main.py", line 9, in <module>
    sftp.put(csv,dest)
  File "C:\Program Files\Python39\lib\site-packages\paramiko\sftp_client.py", line 759, in put
    return self.putfo(fl, remotepath, file_size, callback, confirm)
  File "C:\Program Files\Python39\lib\site-packages\paramiko\sftp_client.py", line 720, in putfo
    s = self.stat(remotepath)
  File "C:\Program Files\Python39\lib\site-packages\paramiko\sftp_client.py", line 493, in stat
    t, msg = self._request(CMD_STAT, path)
  File "C:\Program Files\Python39\lib\site-packages\paramiko\sftp_client.py", line 813, in _request
    return self._read_response(num)
  File "C:\Program Files\Python39\lib\site-packages\paramiko\sftp_client.py", line 865, in _read_response
    self._convert_status(msg)
  File "C:\Program Files\Python39\lib\site-packages\paramiko\sftp_client.py", line 894, in _convert_status
    raise IOError(errno.ENOENT, text)
FileNotFoundError: [Errno 2] No such file

Вот что я придумал до сих пор:

import paramiko
rsa_key = paramiko.RSAKey.from_private_key_file("C:/locationof/privkey", password='password')
csv = "C:/locationof/DELETE_users_snapshot.csv"
dest = "/upload/DELETE_users_snapshot.csv"
transport = paramiko.Transport(("host",4911))
transport.connect(username='user', pkey=rsa_key)
sftp = paramiko.SFTPClient.from_transport(transport)

sftp.put(csv,dest)

Я могу подтвердить, что /upload/ действительно существует, потому что я могу подключиться через filezilla и увидеть его/загрузить туда просто отлично. Вот журнал filezilla при успешной загрузке файла:

Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpConnectOpData::Send() in state 0
Status: Connecting to host:4911...
Trace:  Going to execute C:\Program Files\FileZilla FTP Client\fzsftp.exe
Response:   fzSftp started, protocol_version=10
Trace:  CSftpConnectOpData::ParseResponse() in state 0
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpConnectOpData::Send() in state 2
Command:    keyfile "C:\Users\me\Documents\privkey"
Trace:  CSftpConnectOpData::ParseResponse() in state 2
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpConnectOpData::Send() in state 3
Command:    open "user@host" 4911
Trace:  Looking up host "host" for SSH connection
Trace:  Connecting to host port 4911
Trace:  We claim version: SSH-2.0-FileZilla_3.52.0.1
Trace:  Remote version: SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.10
Trace:  Using SSH protocol version 2
Trace:  Doing ECDH key exchange with curve Curve25519 and hash SHA-256 (unaccelerated)
Trace:  Server also has ecdsa-sha2-nistp256/ssh-rsa host keys, but we don't know any of them
Trace:  Host key fingerprint is:
Trace:  ssh-ed25519 255 b6:bf:f6:7d:d5:ee:25:b9:b3:da:94:03:ce:16:bf:e6 iYh1W2ce0YiCyZo19PktVYQJwrYqjmn6qaopbW0HIzQ=
Trace:  Initialised AES-256 GCM outbound encryption
Trace:  Initialised AES256 GCM outbound MAC algorithm (in ETM mode) (required by cipher)
Trace:  Initialised AES-256 GCM inbound encryption
Trace:  Initialised AES256 GCM inbound MAC algorithm (in ETM mode) (required by cipher)
Trace:  Private key in 'C:\Users\me\Documents\privkey' is encrypted, defer loading until use.
Trace:  Successfully loaded 1 key pair from file
Status: Using username "user". 
Trace:  Offered public key from "C:\Users\me\Documents\privkey"
Trace:  Offer of public key accepted, trying to authenticate using it.
Trace:  CSftpControlSocket::SetAsyncRequestReply
Command:    Pass: ********
Trace:  Sent public key signature
Trace:  Access granted
Trace:  Opening main session channel
Trace:  Opened main channel
Trace:  Started a shell/command
Status: Connected to host
Trace:  Remote working directory is /upload
Trace:  CSftpConnectOpData::ParseResponse() in state 3
Trace:  CControlSocket::ResetOperation(0)
Trace:  CSftpConnectOpData::Reset(0) in state 3
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpListOpData::Send() in state 0
Status: Retrieving directory listing...
Trace:  CSftpChangeDirOpData::Send() in state 0
Trace:  CSftpChangeDirOpData::Send() in state 1
Command:    pwd
Response:   Current directory is: "/upload"
Trace:  CSftpChangeDirOpData::ParseResponse() in state 1
Trace:  CControlSocket::ResetOperation(0)
Trace:  CSftpChangeDirOpData::Reset(0) in state 1
Trace:  CSftpListOpData::SubcommandResult(0) in state 1
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpListOpData::Send() in state 2
Trace:  CSftpListOpData::Send() in state 3
Command:    ls
Status: Listing directory /upload
Trace:  CSftpListOpData::ParseResponse() in state 3
Trace:  CControlSocket::ResetOperation(0)
Trace:  CSftpListOpData::Reset(0) in state 3
Status: Directory listing of "/upload" successful
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpConnectOpData::Send() in state 0
Status: Connecting to host:4911...
Trace:  Going to execute C:\Program Files\FileZilla FTP Client\fzsftp.exe
Response:   fzSftp started, protocol_version=10
Trace:  CSftpConnectOpData::ParseResponse() in state 0
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpConnectOpData::Send() in state 2
Command:    keyfile "C:\Users\me\Documents\privkey"
Trace:  CSftpConnectOpData::ParseResponse() in state 2
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpConnectOpData::Send() in state 3
Command:    open "user@host" 4911
Trace:  Looking up host "host" for SSH connection
Trace:  Connecting to host port 4911
Trace:  We claim version: SSH-2.0-FileZilla_3.52.0.1
Trace:  Remote version: SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.10
Trace:  Using SSH protocol version 2
Trace:  Doing ECDH key exchange with curve Curve25519 and hash SHA-256 (unaccelerated)
Trace:  Server also has ecdsa-sha2-nistp256/ssh-rsa host keys, but we don't know any of them
Trace:  Host key fingerprint is:
Trace:  ssh-ed25519 255 b6:bf:f6:7d:d5:ee:25:b9:b3:da:94:03:ce:16:bf:e6 iYh1W2ce0YiCyZo19PktVYQJwrYqjmn6qaopbW0HIzQ=
Trace:  Initialised AES-256 GCM outbound encryption
Trace:  Initialised AES256 GCM outbound MAC algorithm (in ETM mode) (required by cipher)
Trace:  Initialised AES-256 GCM inbound encryption
Trace:  Initialised AES256 GCM inbound MAC algorithm (in ETM mode) (required by cipher)
Trace:  Private key in 'C:\Users\me\Documents\privkey' is encrypted, defer loading until use.
Trace:  Successfully loaded 1 key pair from file
Status: Using username "user". 
Trace:  Offered public key from "C:\Users\me\Documents\privkey"
Trace:  Offer of public key accepted, trying to authenticate using it.
Trace:  CSftpControlSocket::SetAsyncRequestReply
Command:    Pass: ********
Trace:  Sent public key signature
Trace:  Access granted
Trace:  Opening main session channel
Trace:  Opened main channel
Trace:  Started a shell/command
Status: Connected to host
Trace:  Remote working directory is /upload
Trace:  CSftpConnectOpData::ParseResponse() in state 3
Trace:  CControlSocket::ResetOperation(0)
Trace:  CSftpConnectOpData::Reset(0) in state 3
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpFileTransferOpData::Send() in state 0
Status: Starting upload of C:\Users\me\Documents\DELETE_snapshot.csv
Trace:  CSftpChangeDirOpData::Send() in state 0
Trace:  CSftpChangeDirOpData::Send() in state 2
Command:    cd "/upload"
Response:   New directory is: "/upload"
Trace:  CSftpChangeDirOpData::ParseResponse() in state 2
Trace:  CControlSocket::ResetOperation(0)
Trace:  CSftpChangeDirOpData::Reset(0) in state 2
Trace:  CSftpFileTransferOpData::SubcommandResult(0) in state 1
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpFileTransferOpData::Send() in state 4
Command:    put "C:\Users\me\Documents\DELETE_snapshot.csv" "DELETE_snapshot.csv"
Command:    local:C:\Users\me\Documents\DELETE_snapshot.csv => remote:/upload/DELETE_snapshot.csv
Trace:  CSftpFileTransferOpData::ParseResponse() in state 4
Trace:  CControlSocket::ResetOperation(0)
Trace:  CSftpFileTransferOpData::Reset(0) in state 4
Status: File transfer successful, transferred 75 bytes in 1 second
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpListOpData::Send() in state 0
Status: Retrieving directory listing of "/upload"...
Trace:  CSftpChangeDirOpData::Send() in state 0
Trace:  CControlSocket::ResetOperation(0)
Trace:  CSftpChangeDirOpData::Reset(0) in state 0
Trace:  CSftpListOpData::SubcommandResult(0) in state 1
Trace:  CControlSocket::SendNextCommand()
Trace:  CSftpListOpData::Send() in state 2
Trace:  CSftpListOpData::Send() in state 3
Command:    ls
Status: Listing directory /upload
Trace:  CSftpListOpData::ParseResponse() in state 3
Trace:  CControlSocket::ResetOperation(0)
Trace:  CSftpListOpData::Reset(0) in state 3
Status: Directory listing of "/upload" successful

Заранее спасибо!

-Честер


person Chester Bennett    schedule 21.01.2021    source источник
comment
Покажите нам полный стек вызовов исключений + подробный файл журнала FileZilla, показывающий успешную загрузку того же локального файла в тот же удаленный каталог.   -  person Martin Prikryl    schedule 21.01.2021
comment
@MartinPrikryl Кажется, я добавил то, что вы ищете.   -  person Chester Bennett    schedule 22.01.2021
comment
FileZilla подключается к порту 4911, а ваш код Python подключается к порту 22. Есть и другие несоответствия в путях и именах пользователей. Хотя возможно, что это связано с тем, что вы редактировали код и журналы перед публикацией, по крайней мере, убедитесь, что вы редактируете их последовательно. В противном случае нам трудно вам помочь.   -  person Martin Prikryl    schedule 22.01.2021
comment
@MartinPrikryl Извинения. Я пытался скрыть имя пользователя и хост и забыл сопоставить все наборы журналов/кода. Теперь пользователь, хост и порт должны совпадать как в команде filezilla, так и в команде python.   -  person Chester Bennett    schedule 22.01.2021
comment