Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Envoyer un fichier en python sur un serveur distant en SFTP/SSH

+6 votes

Tout est dans le titre, j'aimerai savoir quel est le meilleur moyen d'envoyer un fichier en python sur un serveur distant. Ce serveur possède un serveur SSH, donc il m'est possible d'envoyer un fichier, sauf erreur de ma part. Je précise que je souhaite faire ça avec python 3, donc je ne peux utiliser fabric, compatible uniquement avec python 2.7.

demandé 26-Aou-2015 par fayak (292 points)
edité 26-Aou-2015 par fayak

2 Réponses

+6 votes
 
Meilleure réponse

Petit exemple avec paramiko

import paramiko
import os

client = paramiko.SSHClient()
client._policy = paramiko.WarningPolicy()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh_config = paramiko.SSHConfig()
user_config_file = os.path.expanduser("/home/nsukami/.ssh/config")
if os.path.exists(user_config_file):
    with open(user_config_file) as f:
        ssh_config.parse(f)
        options = ssh_config.lookup('phobos')

cfg = {'hostname': options['hostname'],
       'username': options["user"],
       'port': int(options['port'])}

if 'proxycommand' in options:
    cfg['sock'] = paramiko.ProxyCommand(user_config['proxycommand'])

client.connect(**cfg)

sftp = client.open_sftp()
sftp.put('fabfile.py','/home/patrick/fabfile.py' )
print ("copied successfully!")

sftp.get('/webapps/wappa/dummy.txt', './dummy.txt')
print("retrieved successfully")
sftp.close()

client.close()
exit()
répondu 26-Aou-2015 par Nsukami_ (1,998 points)
sélectionné 27-Aou-2015 par fayak

exactement ca, merci pour ta réponse

+4 votes

Tu as aussi le module pysftp qui est, je trouve, plus simple d'utilisation que paramiko:

with pysftp.Connection('ip', username='login', password='password') as sftp: 
    with sftp.cd('/path/to/upload'):
        sftp.put('path/to/file')
répondu 27-Aou-2015 par Raznak (134 points)
...