web-dev-qa-db-fra.com

'Mettre' dans SFTP en utilisant PAramiko

J'ai installé et écrit le Paramiko suivant qui est incapable de mettre le fichier. Il peut facilement «obtenir» un fichier et exécuter des commandes «ls» dessus.

#set username & password
username='runaway'
password='runaway'
port=22
source= '/Unzip.sh' 
destination ='/var/mpx/www/http'


#SFTP
client.load_system_Host_keys()
print " hostname =%s \n username=%s \n password=%s \n" (hostname,username,password)
t = paramiko.Transport((hostname, port)) 
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put(source,destination)
#sftp.close()
#t.close()

L'utilisation d'une commande 'put' donne l'erreur suivante et le suivi de la pile - 

File "upload_file.py", line 84, in ?
    sftp.put(source,destination)
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 522, in put
    fr = self.file(remotepath, 'wb')
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 221, in open
    t, msg = self._request(CMD_OPEN, filename, imode, attrblock)
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 572, in _request
    return self._read_response(num)
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 619, in _read_response
    self._convert_status(msg)
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 649, in _convert_status
    raise IOError(text)
IOError: Failure

Comment puis-je surmonter cela?

27
fixxxer

La solution m'a semblé très drôle!

source= '/Unzip.sh' 
destination ='/var/mpx/www/http/Unzip.sh'

Il suffit de modifier le chemin de destination pour inclure également le nom du fichier. Je ne m'attendais pas à une telle erreur venant d'un paquet Python.

61
fixxxer

Cela se produit également dans la version 2.0.2 lorsque vous essayez de sftp.mkdir('/exists'):

Traceback (most recent call last):
  ...
  File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 380, in mkdir
    self._request(CMD_MKDIR, path, attr)
  File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 730, in _request
    return self._read_response(num)
  File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 781, in _read_response
    self._convert_status(msg)
  File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 811, in _convert_status
    raise IOError(text)
IOError: Failure

C'était mon correctif Python 2.7.9:

try:
    sftp.mkdir(remote_dir)
except IOError:
    logging.debug('%s already exists.', remote_dir)
0
David Tucker