IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Connexion SFTP avec clé privée


Sujet :

Django Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Connexion SFTP avec clé privée
    Bonjour,
    Je souhaite effectuer un connexion SFTP afin d'upload un fichier sur le serveur SFTP avec password, clé privée et password sur la clé privée via pysftp or il m'est impossible d’établir cette connexion pour des raisons que j'ignore.
    Mon code se présente comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    class SFTPUtils():
     
        def __init__(self, sftp_name, sftp_conf):
     
                try:
                    self.conn = pysftp.Connection(host      = sftp_conf['host'],
                                                  username  = sftp_conf['user'],
                                                  private_key = sftp_conf['private_key'],
                                                  password  = sftp_conf['pass'],
                                                  port      = sftp_conf['port'],
                                                  private_key_pass = sftp_conf['private_key_pass'])
                except Exception as e:
                    self.conn = None
     
                    logger.error('Could not connect to {}'.format(sftp_name))
                    logger.debug(e)
                    raise e
     
        def upload_file(self, local_path, remote_path):
     
            logger.debug('upload_file method...')
            logger.debug('dumping conn_info:')
            logger.debug(self.conn)
            try :
                self.conn.put(local_path, remote_path)
     
            except TimeoutError:
                logger.error('Cant connect to FTP')
                return False
     
            logger.info('User uploaded file %s' % (local_path))
            return True
    Cependant j'obtiens l'erreur : "SSHException No hostkey for host xx.xx.xx.xx found."

    Si quelqu'un a une piste ou la solution, je suis preneur

    Cordialement,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    La hostkey assure que le serveur auquel vous vous connectez est bien celui qu'il prétend et pallier aux attaques "man in the middle".

    Que faire lorsqu'on n'a pas encore cette hostkey est décrit dans la documentation de pysftp (et adapté à votre environnement système).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour t'a réponse.

    J'ai ajouté dans le know_hosts l'adresse du serveur distant ainsi que sa clé publique mais j’obtiens l'erreur : "SSHException Incompatible ssh peer (no acceptable host key)"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    class SFTPUtils():
     
        def __init__(self, sftp_name, sftp_conf):
     
            cnopts = pysftp.CnOpts()
            cnopts.hostkeys.load(os.path.join(settings.SSH_DIR, 'known_hosts'))
     
                try:
                    self.conn = pysftp.Connection(host      = sftp_conf['host'],
                                                  username  = sftp_conf['user'],
                                                  private_key = sftp_conf['private_key'],
                                                  password  = sftp_conf['pass'],
                                                  port      = sftp_conf['port'],
                                                  private_key_pass = sftp_conf['private_key_pass'],
                                                  cnopts    = cnopts)
                except Exception as e:
                    self.conn = None
     
                    logger.error('Could not connect to {}'.format(sftp_name))
                    logger.debug(e)
                    raise e
    Il y a t'il quelque chose que j'aurais mal compris ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    SSH_DIR = os.path.join(BASE_DIR, 'etc', 'ssh')
    FTP = {
        'SFTP': {
            'user': 'User',
            'pass': 'Pass',
            'host': 'xx.xx.xx.xx',
            'port': 22,
            'private_key' : os.path.join(SSH_DIR, 'MyPrivateKey.ppk'),
            'private_key_pass' : 'PkPass'

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Zetsuk0 Voir le message
    J'ai ajouté dans le know_hosts l'adresse du serveur distant ainsi que sa clé publique mais j’obtiens l'erreur : "SSHException Incompatible ssh peer (no acceptable host key)"
    Le message d'erreur suggère de revoir plutôt deux fois qu'une le format du fichier known_hosts et comment y ajouter/supprimer des enregistrements. Et si vous travaillez sur Linux, vous avez certainement des utilitaires systèmes qui font çà.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Points : 6
    Points
    6
    Par défaut problème transfert fichier windows vers linux pysftp python 2.7
    Bonsoir,

    Je rencontre un peu le même problème pour le transfert de fichier avec pysftp.
    Je souhaite transférer un fichier depuis un serveur WS2k16 vers vers un serveur Linux à l'aide de python 2.7 et la librairie pysftp.

    Voici mon bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import pysftp
     
    def uploadZip(localFile,remoteFile,remoteServerName,remoteUsername,private_key_path):
        try:
            cnopts = pysftp.CnOpts()
            cnopts.hostkeys = None
            #with pysftp.Connection(host=remoteServerName, username=remoteUsername, private_key=private_key_path, cnopts=cnopts) as sftp:
            with pysftp.Connection(host=remoteServerName, username=remoteUsername, private_key=private_key_path, cnopts=cnopts) as sftp:
                sftp.put(localFile,remoteFile)
        except Exception, e:
               print('Echec du transfert du fichier "{}" sur "{}"'.format(localFile,remoteServerName))
               print('Erreur : {}'.format(e))
     
    localFile = r'C:\Users\test.arcgis\Desktop\info sftp.txt'
    remoteFile = '/depot/transfert/arcgis/integration/test.txt'
    remoteServerName = 'xxx.xxx.xxx.xxx'
    remoteUserName = 'user'
    private_key_path = r'chemin\vers\cle\privee.ppk'
     
    uploadZip(localFile,remoteFile,remoteServerName,remoteUserName,private_key_path)

    lors de l'exécution du script voici l'erreur qui m'est retournée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur : not a valid DSA private key file
    Auriez vous une idée de ce qu'il faut faire ? j'ai lu qu'il fallait créer sur le serveur windows un répertoire .ssh dans le dossier de l'utilisateur (ici test.arcgis) et créer un fichier known_hosts à l'intérieur.

    merci d'avance de votre aide

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Matt37 Voir le message
    Auriez vous une idée de ce qu'il faut faire ?
    Votre problème est spécifique à votre configuration. Pas facile d'éplucher à votre place les différents bugs-reports pour savoir s'ils s'appliquent ou pas.
    De plus vous utilisez une version de Python que plus grand monde utilise (ce qui n'aide pas pour "tester") et probablement des bibliothèques qui ne sont plus à jour (de ce fait).
    Une chose à faire serait d'installer les dernières versions et voir ce que devient le problème.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    salut,

    Merci de ta réactivité wiztricks.
    J'ai résolu mon problème cette nuit.
    En fait la clé privée RSA générée par puttygen n'est pas dans le format attendu par la librairie pysftp.
    J'ai donc du convertir la clé privée RSA en clé RSA OpenSSH avec puttygen.
    Et là bingo, tout fonctionne

    Merci encore

Discussions similaires

  1. fwbuilder, problème de connexion SSH avec clés publiques/privées
    Par Michaeljackfan dans le forum Sécurité
    Réponses: 1
    Dernier message: 08/06/2016, 14h28
  2. Connexion SFTP avec clé privée sans mot de passe
    Par hallie dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 26/09/2012, 15h45
  3. Transfert avec connexion SFTP
    Par PimSaVie dans le forum WinDev
    Réponses: 0
    Dernier message: 22/06/2009, 16h02
  4. Connexion SFTP avec Clé
    Par HiRoN dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 22/10/2008, 11h10
  5. Connexion SSH avec clefs privée/publique
    Par NikoBe dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 12/06/2007, 20h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo