2011-07-13 15 views
17
में एक सार्वजनिक कुंजी से एक SSH फिंगरप्रिंट पाने

मैं बहुत की तरह एक OpenSSH सार्वजनिक कुंजी लेने के लिए चरणों को समझने के लिए कोशिश कर रहा हूँ:अजगर

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqmEmDTNBC6O8HGCdu0MZ9zLCivDsYSttrrmlq87/YsEBpvwUTiF3UEQuFLaq5Gm + dtgxJewg/UwsZrDFxzpQhCHB6VmqrbKN2hEIkk/HJvCnAmR1ehXv8n2BWw3Jlw7Z + VgWwXAH50f2HWYqTaE4qP4Dxc4RlElxgNmlDPGXw/dYBvChYBG/RvIiTz1L + pYzPD4JR54IMmTOwjcGIJl7nk1VjKvl3D8Wgp6qejv4MfZ7Htdc99SUKcKWAeHYsjPXosSk3GlwKiS/sZi51Yca394GE7T4hZu6HTaXeZoD8 + IZ7AijYn89H7EPjuu0iCAa/cjVzBsFHGszQYG + U5KfIw ==

और फिर एक मानक में परिवर्तित करने के लिए इसलिए जैसे अंगुली की छाप:

2048 49:d3:cb:f6:00:d2:93:43:a6:27:07:ca:12:fd:5d:98 id_rsa.pub (RSA) 

मैं इस को समझने के लिए OpenSSH स्रोत में गोता लगाने का प्रयास किया है, लेकिन यह मेरे सिर पर है। मेरा पहला अनुमान कुंजी टेक्स्ट पर एक साधारण MD5 करना था, लेकिन परिणाम उपरोक्त आउटपुट से मेल नहीं खाता है।

+0

फिंगर प्रिंट एक सीधा हैश नहीं है कुंजी का आप विशेष रूप से ssh-keygen के लिए openssh स्रोत में पहुंचा सकते हैं, जिसमें फिंगरप्रिंट निष्कर्षण कोड है। यहां कुछ मामूली विवरण: http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html –

उत्तर

35

यह है base64 एनकोडेड कुंजी का MD5 योग:

import base64 
import hashlib 

def lineToFingerprint(line): 
    key = base64.b64decode(line.strip().split()[1].encode('ascii')) 
    fp_plain = hashlib.md5(key).hexdigest() 
    return ':'.join(a+b for a,b in zip(fp_plain[::2], fp_plain[1::2])) 
+1

धन्यवाद, यह उपयोगी था। मैंने 'line.partition (' ssh-rsa ') [2] '' line.split() [2] 'के साथ वैकल्पिक ओपनएसएसएच एनोटेशन को संभालने के लिए प्रतिस्थापित किया:' ssh-rsa ..... key ... JohnDoe @ her_laptop' जिसे हटाया जाना चाहिए। –

+0

@ एड्रियान आप बिल्कुल सही हैं, निश्चित हैं। मुझे लगता है कि आपका मतलब है 'विभाजन() [1] '। – phihag

+0

ओह, हाँ '[1] '._।" –

3

https://github.com/ojarva/sshpubkeys

pip install sshpubkeys

उपयोग:

import sshpubkeys 
key = sshpubkeys.SSHKey("ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqmEmDTNBC6O8H" + 
    "GCdu0MZ9zLCivDsYSttrrmlq87/YsEBpvwUTiF3UEQuFLaq5Gm+dtgxJewg/UwsZrDFxz" + 
    "pQhCHB6VmqrbKN2hEIkk/HJvCnAmR1ehXv8n2BWw3Jlw7Z+VgWwXAH50f2HWYqTaE4qP4" + 
    "Dxc4RlElxgNmlDPGXw/dYBvChYBG/RvIiTz1L+pYzPD4JR54IMmTOwjcGIJl7nk1VjKvl" + 
    "3D8Wgp6qejv4MfZ7Htdc99SUKcKWAeHYsjPXosSk3GlwKiS/sZi51Yca394GE7T4hZu6H" + 
    "TaXeZoD8+IZ7AijYn89H7EPjuu0iCAa/cjVzBsFHGszQYG+U5KfIw== [email protected]") 
print(key.bits) # 2048 
print(key.hash()) # '49:d3:cb:f6:00:d2:93:43:a6:27:07:ca:12:fd:5d:98' 
+1

क्या दिलचस्प है कि' sshpubkeys 'वास्तव में इसके कार्यान्वयन के लिए इस प्रश्न के दूसरे उत्तर को संदर्भित करता है: https://github.com/ojarva/python-sshpubkeys/blob/ मास्टर/sshpubkeys/keys.py # L126 – andreyrd