2010-10-06 25 views
0

... ou si non, pouvez-vous me fournir un lien ou un numéro RFC vers un algorithme complet (de l'obtention du fichier/chaîne de clé privée codé ASCII à la génération du fichier/chaîne de clé publique codé ASCII).Est-il possible de générer une clé publique SSH à partir d'une clé privée en utilisant Python?

Pour vous montrer une image plus grande - j'ai commencé à utiliser une bibliothèque pylibssh2. Cette bibliothèque a une méthode - userauth_publickey_fromfile (elle soulève NotImplementedException, mais lorsque vous forcez le lancement de la liaison python - cela fonctionne). Le problème est que cette méthode veut la clé privée (bonne) et la clé publique (l'enfer sait pourquoi). Bien sûr, je peux passer ces deux clés comme argumets à mes fonctions, mais je pense que c'est inutile, et je ne veux pas attendre une variable de plus juste pour ça. Je veux donc générer une clé publique par moi-même. Peut-être qu'il me manque quelque chose dans pylibssh2 ou même dans libssh2 lui-même (je peux aussi écrire des bindings pour ça)?

Merci pour toute aide!

+0

trouvé une copie exacte: http://stackoverflow.com/questions/2466401/how-to-generate-ssh-key-pairs-with-python – Daenyth

+0

@Daenyth: Non, ce n'est pas une copie exacte . C'est seulement lié. –

Répondre

2

Avez-vous besoin de la réponse pour être strictement python? Vous pouvez le faire avec ssh-keygen -y -f privatekey

+1

Oui, je sais. Mais j'essaie d'éviter les commandes externes ou les exécutions de shell. – liadan

0

Je ne sais pas comment vous userauth_publickey_fromfile() travail, mais selon http://github.com/wallix/pylibssh2/blob/master/libssh2/session.py, cette méthode attend chemins de fichiers clés, pas les clés elles-mêmes.

Si la clé privée est la vôtre, alors les deux - la clé publique et privée - devraient résider dans votre répertoire ~/.ssh.

Les clés privées et publiques ne peuvent être créées que par paires. Si vous pouviez en tirer l'un par l'autre, un univers cryptographique exploserait.

La clé publique doit être mise à disposition de l'autre côté de la connexion SSH. Par conséquent, cette méthode l'attend en plus de la clé privée.

0
import commands 
cmd = "ssh-keygen -y -f %s" % (file) 
return commands.getstatusoutput(cmd)[1]