Paramiko Python: IOError: [Errno 13] le refus d'une Autorisation

La Question:

Puis-je faire quelque chose comme:

self.sftp.put(sourceFilePath, final_destination, use_sudo=True)

Je peux créer des dossiers, mais pas les fichiers? Ai-je besoin d'appeler explicitement sudo ou de mettre quelque chose dans paramiko? Dois-je copier le fichier à un permis de l'espace et chowning? Est-il un moyen de donner paramikko sudoer sans l'aide des touches ou d'avoir à déconner avec ssh.exec_command("sudo mv")? Ce qui me manque?

Le Code:

class Ssh(object):
def __init__(self):
super(Ssh, self).__init__()
def setup(self):
'''Setup connection'''
try:
# DEBUG
paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG)
#set username & password
username = 'sgdevbox'
password = MainFrame.ssh_pass
host = '192.168.0.170'
port = 22
self.transport = paramiko.Transport((host, port))
self.transport.connect(username = username, password = password)
self.sftp = paramiko.SFTPClient.from_transport(self.transport)
print(self.sftp.sock)
except Exception, e:
print(traceback.format_exc())
def putFiles(self, sources, listingSku):
'''
Upload images to server along with all currentItemInfo, plus initials and date
Basically build the auction and put it into the queue for verification
'''
print('\n# Ssh.putFiles() #')
if isinstance(sources, unicode):
sources = {sources,'True'}
try:
self.setup()
destination = '/var/www'
cwd = os.getcwd()
for source in sources:
filename = os.path.split(source)[-1]
destinationFolder = listingSku
final_path = posixpath.join(destination,destinationFolder)
try:
self.sftp.mkdir(final_path, mode=777)
except:
print(traceback.format_exc())
final_destination = posixpath.join(final_path, filename)
sourceFilePath = os.path.join(cwd,source)
print('\n# Source Path: {}\n# Destination Path: {}\n\n'.format(sourceFilePath,final_destination))
self.sftp.put(sourceFilePath, final_destination)
except Exception, e:
print(traceback.format_exc())
return

Le Traceback:

# Source Path: C:\A\Long\Path\622-402_01.JPEG
# Destination Path: /var/www/WOOBLE-WAMBLER-SPAM-1235/622-402_01.JPEG
DEBUG:paramiko.transport.sftp:[chan 1] open('/var/www/WOOBLE-WAMBLER-SPAM-1235/622-402_01_swatch.JPEG', 'wb')
Traceback (most recent call last):
File "display_image.py", line 67, in putFiles
self.sftp.put(sourceFilePath, final_destination)
File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 565, in put
fr = self.file(remotepath, 'wb')
File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 245, in open
t, msg = self._request(CMD_OPEN, filename, imode, attrblock)
File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 635, in _request
return self._read_response(num)
File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 682, in _read_response
self._convert_status(msg)
File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 710, in _convert_status
raise IOError(errno.EACCES, text)
IOError: [Errno 13] Permission denied

D'autres posts que j'ai regardé:

Certains de ces postes sont un peu vieux, mais semble indiquer que paramiko ne l'a pas mis en œuvre? Le tissu a une version mise en oeuvre, mais je ne suis pas sûr que l'ajout de plus de dépendances.

(Pdb) import pkg_resources
(Pdb) pkg_resources.get_distribution('paramiko').version
'1.13.0'
À l'aide de pysftp donne la même erreur. Malheureusement je n'ai pas la possibilité d'utiliser le Tissu ou le changement de racine. suce en particulier parce que l'aide de winscp ou fireftp suis en mesure de se connecter. Toutes les nouvelles idées?
J'ai mis à jour ma réponse ci-dessous.

OriginalL'auteur jmunsch | 2014-04-17