ssh-rsa à clé publique de validation à l'aide d'une expression régulière
Quelle expression régulière puis-je utiliser (le cas échéant), afin de valider qu'une chaîne est un juridique ssh clé publique rsa?
Je n'ai besoin que de valider la clé réelle - je ne se soucient pas de la clé, tapez le précède ou le nom d'utilisateur commentaire après.
Idéalement, quelqu'un va également fournir le code python pour exécuter la regex de validation.
Grâce.
Comme l'a souligné David, vérifier que la chaîne contenue uniquement valable en Base64 caractères est un début, mais même cela ne permet pas d'assurer qu'il est valide de clés SSH. Depuis la clé est essentiellement binaire de données (au format Base64) je ne pense pas qu'une regex est le bon outil pour la validation des touches à tout.
Pourquoi croyez-vous besoin de faire cela?
Je veux m'assurer que c'est une clé valide avant mon système automatique met dans le fichier authorized_keys.
Voir aussi pypi.python.org/pypi/sshpubkeys pour un paquet python qui permet de valider la commande ssh-rsa, ssh-dss, ssh-ed25519 et ecdsa clés (mieux que des contrôles d'intégrité, il comprend en fait la validation de la clé de format et les spécifications de conformité). Avertissement: je suis l'auteur.
Pourquoi croyez-vous besoin de faire cela?
Je veux m'assurer que c'est une clé valide avant mon système automatique met dans le fichier authorized_keys.
Voir aussi pypi.python.org/pypi/sshpubkeys pour un paquet python qui permet de valider la commande ssh-rsa, ssh-dss, ssh-ed25519 et ecdsa clés (mieux que des contrôles d'intégrité, il comprend en fait la validation de la clé de format et les spécifications de conformité). Avertissement: je suis l'auteur.
OriginalL'auteur Warlax | 2010-03-22
Vous devez vous connecter pour publier un commentaire.
Un "assez bon" vérifier est de voir si la clé commence par l'en-tête correcte.
La partie de données de la clé doit décoder à partir de base64, ou il échouera avec une base64.binascii.Erreur
Décompresser les 4 premiers octets (un int), qui devrait être de 7. C'est le
longueur de la chaîne suivante (je suppose que cela pourrait être différent, mais vous n'êtes intéressé que par ssh-rsa).
Sinon, vous pouvez renoncer à la binaire des contrôles, et de regarder pour
AAAAB3NzaC1yc2EA
au début de ssh-rsa clé, bits, je serait toujours vérifier s'il est valable en base64.[modifier] Précisions:
Via la spécification, la première partie si la clé est d'une longueur de préfixe de la chaîne. La longueur est emballé comme un big-endian unsigned int ('>I " pour un python struct). C'est un 7 ici, parce que la chaîne suivante, 'ssh-rsa, est de 7 octets de long.
data[4:11]
est de 7 octets (par le préfixe de longueur), mais j'ai édité le code ci-dessus à l'utilisation de certains descriptives des variables de l'essayer et de le rendre plus clair. Si vous voulez être approfondie, vous devriez également vérifier pour ssh-dss, et, éventuellement, pgp-signe-rsa, et pgp-signe-dss, mais ils sont beaucoup moins fréquents.data[4:11] == type
veux dire?OriginalL'auteur JimB
Basé sur les références à "type de clé qui précède" et "nom d'utilisateur commentaire après", je suppose que vous parlez de clés publiques stockées dans ssh2 fichier de format.
Dans ce format, la clé est stockée dans base64 format, une simple vérification pour vérifier que la chaîne ne contient que des valides base64 caractères.
Si vous voulez aller un peu plus loin, vous pourriez noter que les premiers octets de la clé codée spécifier le type de clé, et le match. Voir ce post, qui dit:
OriginalL'auteur David Gelhar