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é:
- http://www.lag.net/paramiko/docs/paramiko.SFTPClient-class.html#put
- J'essaie de comprendre pourquoi j'obtiens une erreur "Autorisation Refusée" lors de l'utilisation de paramiko 1.7.6
- "Put" en SFTP en utilisant PAramiko
- IOError: [Errno 13] le refus d'une Autorisation:
- IOError: [Errno 13] le refus d'une Autorisation
- Pourquoi suis-je IOError: [Errno 13] le refus d'une Autorisation?
- Python - IOError: [Errno 13] le refus d'une Autorisation:
- à l'aide de shutil.copyfile-je obtenir un Python IOError: [Errno 13] le refus d'une Autorisation:
- https://github.com/fabric/fabric/issues/257
- https://github.com/fabric/fabric/issues/828
- https://github.com/fabric/fabric/issues/257
- http://code.activestate.com/recipes/576810-copy-files-over-ssh-using-paramiko/
- Comment lancer la commande sudo avec paramiko? (Python)
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'
J'ai mis à jour ma réponse ci-dessous.
OriginalL'auteur jmunsch | 2014-04-17
Vous devez vous connecter pour publier un commentaire.
1) tâche Cron pour déplacer des dossiers à partir de /home/utilisateur/Bureau /var/www
2) connectez-vous en tant que root. ( d'évidentes questions de sécurité )
Après l'exécution de
sudo passwd root
sur le serveur hôte, je suis maintenant en mesure de transférer les fichiers de /var/www à la racine.J'avais aussi ajouté utilisateur www-data Et de manière récursive chowned les fichiers et les répertoires, mais je pense que la configuration d'un mot de passe root a fait le tour.
Modifier ne faites pas ci-dessus:
Modifier les autorisations et/ou de la propriété
Sur linux: Si vous pouvez utiliser le protocole ssh:
ls -ld /path/to/location
pour voir à qui appartient le répertoire et a r/w autorisations.
Puis regardez dans l'aide:
usermod
addgroup
useradd
chown
chmod
pour donner à l'utilisateur r/w autorisations.
Cela peut être fait par:
Voir:
OriginalL'auteur jmunsch
J'ai été faire l'erreur "autorisation refusée" sur Windows me. Mon code ressemble à ceci -
Alors je l'ai changé, comme ci-dessous -
et j'ai pu télécharger le fichier correctement.
OriginalL'auteur Manoj Joshi