SSHClient paramiko Python?

Я использую этот метод для отправки файла на удаленный сервер:

def runSendArchive(host, port, username, password, remote_directory, archive):
    try:
        s = paramiko.SSHClient()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        s.connect(host, username, password, port)

        sftp = s.open_sftp()
        sftp.put(archive, remote_directory)
        print "3 - The file was uploaded via SSH!"

    except (BadHostKeyException, AuthenticationException, SSHException, socket.error) as e:
        print "4 - Error! The file was not uploaded: ", e

Он возвращает мне исключение:

except (BadHostKeyException, AuthenticationException, SSHException, socket.error) as e: NameError: global name

'BadHostKeyException' не определено

Как правильно пользоваться этой библиотекой?

Теперь я получаю следующую ошибку:

File "run.py", line 65, in runSendArchive
    sftp.put(archive, remote_directory)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 721, in put
    return self.putfo(fl, remotepath, file_size, callback, confirm)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 677, in putfo
    with self.file(remotepath, 'wb') as fr:
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 338, in open
    t, msg = self._request(CMD_OPEN, filename, imode, attrblock)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 774, in _request
    return self._read_response(num)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 826, in _read_response
    self._convert_status(msg)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 859, in _convert_status
    raise IOError(text)
IOError: Failure

65 строка sftp.put(archive, remote_directory)


person OPV    schedule 13.11.2017    source источник


Ответы (1)


Судя по строке

paramiko.SSHClient()

вы звоните import paramiko

Поскольку BadHostKeyException находится в paramiko.ssh_exception, вам нужно добавить

from paramiko.ssh_exception import BadHostKeyException, AuthenticationException, SSHException

См. http://docs.paramiko.org/en/2.3/api/ssh_exception.html

  • paramiko.ssh_exception.BadHostKeyException
  • paramiko.ssh_exception.AuthenticationException
  • paramiko.ssh_exception.SSHException

находятся в этом модуле.

Для вашего примера фрагмента кода вам нужно будет добавить следующее перед функцией runSendArchive

import socket
import paramiko
from paramiko.ssh_exception import BadHostKeyException, AuthenticationException, SSHException
person Daniel F    schedule 13.11.2017
comment
Я пробовал импортировать: import paramiko.ssh_exception.AuthenticationException - person OPV; 14.11.2017
comment
Это дает мне: `import paramiko.ssh_exception.AuthenticationException ImportError: Нет модуля с именем AuthenticationException` - person OPV; 14.11.2017
comment
Посмотрите вопрос еще раз, пожалуйста - person OPV; 14.11.2017
comment
stackoverflow.com/questions/3091326/put-in-sftp -using-paramiko - ›remote_directory должно быть remote_path (включая новое имя файла на сервере, т. е. /home/user/upload.txt) - person Daniel F; 14.11.2017