web-dev-qa-db-fra.com

paramiko - se connecter avec une clé privée - pas un fichier de clé privée / publique OPENSSH valide

J'essaie de trouver la solution à cela et je ne comprends pas ce que je fais mal.

Sur mon serveur Linux, j'ai exécuté la commande suivante:

ssh-keygen -t rsa

Cela a généré un id_rsa et id_rsa.pub fichier.

Je les ai ensuite copiés localement et j'ai tenté d'exécuter le code suivant:

    ssh = paramiko.SSHClient()
    ssh.set_missing_Host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('myserver', username='myuser', key_filename='id_rsa')
    sftp = ssh.open_sftp()
    sftp.chdir('/path/to/file')
    sftp.get(file, os.path.join(tmp_dir, '{0}.existing-{1}'.format('myfile', current_datetime)))
except Exception, err:
    logging.debug(err)
    logging.info('Error connecting to Host')

J'obtiens l'erreur suivante dans mon journal:

2017-08-22 22:41:54,486 Switch to new keys ...
2017-08-22 22:41:54,502 Adding ssh-ed25519 Host key for myserver.domain.com: 51ac2fe875499371256dd8c5a132f394
2017-08-22 22:41:54,502 Trying key 7688e32d30edb2c94bfe39be9897004f from id_rsa
2017-08-22 22:41:54,532 userauth is OK
2017-08-22 22:41:54,549 Authentication (publickey) failed.
2017-08-22 22:41:54,563 not a valid OPENSSH private key file
2017-08-22 22:41:54,563 Error connecting to Host
2017-08-22 22:41:54,657 EOF in transport thread

est-ce que je manque quelque chose? Il s'agit d'un fichier de clé privée OPENSSH valide.

modifier - si j'utilise le id_rsa.pub J'obtiens ce qui suit:

2017-08-22 22:58:09,631 Kex agreed: ecdh-sha2-nistp256
2017-08-22 22:58:09,631 HostKey agreed: ssh-ed25519
2017-08-22 22:58:09,631 Cipher agreed: aes128-ctr
2017-08-22 22:58:09,631 MAC agreed: hmac-sha2-256
2017-08-22 22:58:09,631 Compression agreed: none
2017-08-22 22:58:09,694 kex engine KexNistp256 specified hash_algo <built-in function openssl_sha256>
2017-08-22 22:58:09,710 Switch to new keys ...
2017-08-22 22:58:09,726 Adding ssh-ed25519 Host key for myserver.domain.com: 51ac2fe875499371256dd8c5a132f394
2017-08-22 22:58:09,726 not a valid OPENSSH private key file
2017-08-22 22:58:09,726 Error connecting to Host
2017-08-22 22:58:09,819 EOF in transport thread

avec quoi?

6
whoisearth

J'ai une configuration d'authentification de clé paramiko rsa en cours d'exécution, voici un résumé de ce que j'ai fait:

  • exécutez ssh-keygen -t rsa pour générer les fichiers id_rsa et id_rsa.pub

  • copier le contenu de id_rsa.pub dans ~/.ssh/authorized_keys (sur le système cible)

  • copier le fichier de clés id_rsa (privé) sur la machine cliente

  • (sur la cible j'ai le mode 755 sur .ssh/et 644 sur authorized_keys)

Le code suivant exécute une connexion à l'aide de paramiko:

import logging
import paramiko

logger = paramiko.util.logging.getLogger()
hdlr = logging.FileHandler('app.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr) 
logger.setLevel(logging.INFO)

try:
    ssh = paramiko.SSHClient()
    ssh.set_missing_Host_key_policy(paramiko.AutoAddPolicy())
    k = paramiko.RSAKey.from_private_key_file('id_rsa')
    ssh.connect('160.100.28.216', username='edwards', pkey = k)
    sftp = ssh.open_sftp()
    sftp.chdir('/home/edwards')
except Exception, err:
    logging.debug(err)
    logging.info('Error connecting to Host')

Ce qui suit apparaît dans le fichier app.log:

    2017-08-23 16:52:33,154 INFO Connected (version 2.0, client OpenSSH_6.6.1)
    2017-08-23 16:52:46,926 INFO Authentication (publickey) successful!
    2017-08-23 16:52:47,203 INFO [chan 0] Opened sftp connection (server version 3)

(NB le client paramiko utilise le fichier de clé privée.) Tout cela est sur Python 2.7. J'espère que tout ou partie de cela peut être utile.

7
AS Mackay

Vous pouvez convertir id_rsa en clé privée de type RSA avec ssh-keygen. J'ai fait face à une situation similaire et cela a fonctionné pour moi.

Pour convertir "BEGIN OPENSSH PRIVATE KEY" en "BEGIN RSA PRIVATE KEY"

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
12
ahirapara