SHA256 ssh फ़िंगरप्रिंट क्लाइंट द्वारा दिया गया, लेकिन केवल md5 फ़िंगरप्रिंट सर्वर के लिए जाना जाता है


118

एक नए / अज्ञात सर्वर (हाल के ओपनएसएसएच के साथ) को जोड़ने पर, उदाहरण के लिए:

ssh example.com

आपको नीचे जैसा फिंगरप्रिंट मिलता है:

The authenticity of host 'example.org (192.0.2.42)' can't be established.
RSA key fingerprint is SHA256:7KMZvJiITZ+HbOyqjNPV5AeC5As2GSZES5baxy1NIe4.
Are you sure you want to continue connecting (yes/no)?

हालाँकि, इस रूप में फिंगरप्रिंट आमतौर पर सर्वर के लिए दिए जाते हैं:

f6:fc:1c:03:17:5f:67:4f:1f:0b:50:5a:9f:f9:30:e5

मैं प्रामाणिकता की जांच कैसे कर सकता हूं (बिना SHA256 फिंगरप्रिंट प्रदान करने के लिए सर्वर प्रवेश किए बगैर)?


जवाबों:


151

पहले फिंगरप्रिंट को हेक्सेड md5 हैश के रूप में दिया गया था। ओपनएसएसएच 6.8 से शुरू होकर फिंगरप्रिंट अब बेस 64 SHA256 (डिफ़ॉल्ट रूप से) के रूप में प्रदर्शित होता है। आप सीधे इनकी तुलना नहीं कर सकते।

उन्होंने एक नया कॉन्फ़िगरेशन विकल्प भी जोड़ा FingerprintHash। आप रख सकते हैं

FingerprintHash md5

अपने ~/.ssh/configपुराने ( कम सुरक्षित ) डिफ़ॉल्ट पर वापस जाने के लिए या केवल एकल उपयोग के लिए इस विकल्प का उपयोग करें:

ssh -o FingerprintHash=md5 example.org

जो फिंगरप्रिंट देगा

MD5:f6:fc:1c:03:17:5f:67:4f:1f:0b:50:5a:9f:f9:30:e5

उम्मीद है कि सर्वर प्रवेश निकट भविष्य में दोनों प्रकार के फिंगरप्रिंट प्रदान करते हैं।

संपादित करें:

जैसा कि आर्क लिनक्स मंचों में दिया गया है , एक तीसरा विकल्प भी है:

Host example.org
    FingerprintHash md5

संपादित करें:

आप OpenSSH रसोई की किताब पर दी गई एक मनमानी कुंजी का हैश उत्पन्न कर सकते हैं :

कुंजी प्राप्त करें:

  • के साथ कुंजी डाउनलोड करें ssh-keyscan example.org > key.pub
  • या: सर्वर में कुंजियों को खोजें /etc/ssh

हैश उत्पन्न करें:

  • सुनिश्चित करें कि आपके पास केवल एक पंक्ति / प्रकार है, इसलिए या तो अन्य सभी को हटाएं key.pubया चलाएंssh-keyscan -t rsa example.org > key.pub
  • ssh-keygen -l -f key.pub (डिफ़ॉल्ट हैश, ओपनएसएसएच संस्करण पर निर्भर करता है)
  • ssh-keygen -l -f key.pub -E md5 (वर्तमान OpenSSH पर md5)
  • awk '{print $2}' ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 (पुराने OpenSSH पर sha256)
  • (आपको awk '{print $3}'ssh-keycan के नए संस्करणों के लिए लाइन शुरू करने की आवश्यकता हो सकती है क्योंकि प्रारूप बदल गया है)

4
क्या आपको पता है कि जिस स्थिति में मैं वहां पहुंचता हूं, उस सर्वर पर मैं sha256 फिंगरप्रिंट कैसे प्राप्त कर सकता हूं? ssh-keygen -lf सर्वर पर केवल मुझे md5 प्रिंट देता है, और मेरे जीवन के लिए मुझे यह नहीं मिल रहा है कि मैं अब तक आदमी पेजों या www में
sha256

6
मैंने ओपनएसएसएच कुकबुक से शेप 6sum का उपयोग करके उत्तर में एक स्निप जोड़ा।
जॉनीजैड

2
धन्यवाद, आप वास्तविक उत्तर वाले उत्तर देने वाले केवल एक हैं।
फ्लोरियन हीगल

1
दुर्भाग्य से मुझे आपके awk1-लाइनर का उपयोग करते समय एक अलग SHA-256 हैश मिलता है (मेरे ग्राहक द्वारा दिखाए गए हैश से मेल नहीं खाता)
जोनाथन क्रॉस

2
sha256sum -b | awk '{print $1}' | xxd -r -popenssl sha256 -binaryस्थापित विम की आवश्यकता नहीं द्वारा प्रतिस्थापित किया जा सकता है। परिणामी कमांडलाइन होगी:awk '{print $2}' ~/.ssh/id_rsa.pub | base64 -d | openssl sha256 -binary | base64
अलेक्जेंडर जीप

27

बस छोटी सी बैश स्क्रिप्ट बनाई गई है जो /etc/ssh/sshd_configदोनों SSH-256और MD5अलगो में सर्वर (अनुमति के अनुसार ) पर अनुमति देने वाले सभी प्रमुख सिफर के लिए उंगलियों के निशान के साथ प्रिंट करेगी । यहाँ एक उदाहरण आउटपुट है:

 +---------+---------+-----------------------------------------------------+
 | Cipher  | Algo    | Fingerprint                                         |
 +---------+---------+-----------------------------------------------------+
 | RSA     | MD5     | MD5:15:66:80:fd:79:d8:c0:92:e8:39:4a:bc:4e:c4:00:15 |
 | RSA     | SHA-256 | SHA256:G+rKuLGk+8Z1oxUV3cox0baNsH0qGQWm/saWPr4qZMM  |
 +---------+---------+-----------------------------------------------------+
 | ECDSA   | MD5     | MD5:f5:90:5c:03:2e:38:1b:c9:86:bd:86:47:5d:22:79:17 |
 | ECDSA   | SHA-256 | SHA256:GGmuOzsG4EGeRV9KD1WK7tRf3nIc40k/5jRgbTZDpTo  |
 +---------+---------+-----------------------------------------------------+
 | ED25519 | MD5     | MD5:d1:5a:04:56:37:f4:75:19:22:e6:e5:d7:41:fd:79:fa |
 | ED25519 | SHA-256 | SHA256:QVdqYeVzvsP4n5yjuN3D2fu8hDhskOxQCQAV5f9QK7w  |
 +---------+---------+-----------------------------------------------------+

 +---[RSA 2048]----+ +---[RSA 2048]----+ +---[ECDSA 256]---+ +---[ECDSA 256]---+ +--[ED25519 256]--+ +--[ED25519 256]--+
 |.oE.   +.++      | |        .o+=     | |      ... Eoo    | |  .. o.o..      .| |        ooo++o.+*| |   .o++o. +oo    |
 |  .   o +oo.     | |        .o= =    | |     +.=.=.o .   | | . .o *..      ..| |       . oo.+o.o=| |      ...o.+     |
 |   + . . o.=     | |       ... X +   | |    . X.o.*      | |o o  ++o      .. | |        . o. ...+| |       ..oo.o .  |
 |    = +  .+ o    | |      ..  = + o  | |     + = o o     | |.+  .o.o     .o  | |         +    ..o| |        =oo .+   |
 |   o o .S  .     | |     . .S  o o   | |    . = S   .    | |...  oo.S  .E* * | |        S      ..| |       .SO .  .  |
 |    +            | |    . E. =o..    | |     o           | | .. o.  . o *.O o| |              .  | |        o B .o.. |
 |   o             | | .o. *.o. *.     | |                 | |   ...   . o * * | |               . | |         E *..=.o|
 |    .            | | oo=...  +.      | |                 | |    +.      o + o| |                E| |          . +.+B+|
 |                 | |o+=.o....o+o     | |                 | |   .o+         . | |                 | |           o.ooOX|
 +------[MD5]------+ +----[SHA256]-----+ +------[MD5]------+ +----[SHA256]-----+ +------[MD5]------+ +----[SHA256]-----+

स्क्रिप्ट नीचे SSHसंस्करण के साथ सर्वरों पर भी चलेगी 6.8(पहले -E md5विकल्प जोड़ा गया था)।

संपादित करें: SSH के और भी हाल के संस्करणों के लिए अद्यतित संस्करण, जो ASCII छवियों के समर्थन के साथ अब डिफ़ॉल्ट सिफर स्विच करते हैं।

#!/bin/bash
# server_ssh_fingerprints
#
# Version 0.2
#
# 2016 Kepi <kepi@igloonet.cz
# MIT License
#
# Print fingerprint matrix for all allowed Host Keys
# with all allowed ciphers and MD5 and SHA-256 algos
#
# Changelog:
#
# 2018-03-11 (0.2):
# - Support for newer versions of OpenSSH
# - Added visual keys for all algos too - only in recent OpenSSH versions

# standard sshd config path
SSHD_CONFIG=/etc/ssh/sshd_config

# helper functions
function tablize {
    awk '{printf(" | %-7s | %-7s | %-51s |\n", $1, $2, $3)}'
}
LINE=" +---------+---------+-----------------------------------------------------+"

# header
echo "$LINE"
echo "Cipher" "Algo" "Fingerprint" | tablize
echo "$LINE"

declare -A ALGOS
declare -a ASCII

# fingerprints
while read -r host_key; do
    cipher=$(echo "$host_key" | sed -r 's/^.*ssh_host_([^_]+)_key\.pub$/\1/'| tr 'a-z' 'A-Z')
    if [[ -f "$host_key" ]]; then
        if ssh-keygen -E md5 -l -f "$host_key" &>/dev/null; then
        IFS=$'\n'

        for algo in md5 sha256; do
            n=0
            for line in $(ssh-keygen -E $algo -lv -f "$host_key"); do
                n=$(( n + 1))
                if [[ $n -eq 1 ]]; then
                    ALGOS[$algo]=$(echo "$line" | awk '{print $2}')
                else
                    ASCII[$n]="${ASCII[$n]} ${line}"
                fi
            done
        done
        else
            ALGOS[md5]=$(ssh-keygen -l -f "$host_key" | awk '{print $2}')
            ALGOS[sha256]=$(awk '{print $2}' "$host_key" | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64)
        fi

        echo "$cipher" MD5 "${ALGOS[md5]}" | tablize
        echo "$cipher" SHA-256 "${ALGOS[sha256]}" | tablize
        echo "$LINE"
    fi
 done < <(awk '/^HostKey/ {sub(/^HostKey\s+/,"");print $0".pub"};' $SSHD_CONFIG)

echo
for line in "${ASCII[@]}"; do
    echo "$line"
done

यह सिर्फ सुंदर JonnyJDजवाब के जवाब से जानकारी का उपयोग कर प्रिंट है । धन्यवाद।


1
मैंने इसे और अधिक मजबूत बनाया और कार्यक्षमता में थोड़ा सुधार किया; संस्करण 0.3 (चैंज के साथ) यहाँ: github.com/unixnut/scripts/blob/master/ssh_fprint इसे लिखने के लिए धन्यवाद, यह बहुत बढ़िया है!
एलिस्टेयर इरविन

6

यह ssh-keygen निकला (संस्करण 6.6 के कुछ समय बाद; संभवतः 6.8) के पास एक -E md5विकल्प है, जो इसे md5 फिंगरप्रिंट के रूप में फिंगरप्रिंट को प्रिंट करने का कारण बनेगा। इसलिए, यदि आप सर्वर की सार्वजनिक कुंजी फ़ाइल को स्वतंत्र रूप से हड़प सकते हैं, तो आप उसे फीड कर सकते हैं ssh-keygen -E md5 -l -f ssh_host_rsa_key.pubऔर अपना परिचित फिंगरप्रिंट प्राप्त कर सकते हैं।


2
यह सब पहले से ही जवाब में पहले से ही अच्छी तरह से स्वरूपित है।
जकूजी e ’’

3

निम्नलिखित एक-लाइनर काम करता है (कम से कम) Ubuntu 16.04,18.04 / Centos >= 7

(सर्वर के साथ परीक्षण किया गया: openssh 3.9- openssh 7.4)

ssh-keygen -l -E md5 -f <(ssh-keyscan -t rsa 192.168.2.1) \
| awk '{print $2}' | cut -d":" -f 2-

आउटपुट:

# 192.168.2.1:22 SSH-2.0-OpenSSH_5.3
65:2c:c4:03:03:2f:6d:c0:c0:09:79:e7:33:c4:f1:78

1

तालिका में यादृच्छिक कला प्राप्त करने के लिए संशोधित करने की कोशिश की:

# standard sshd config path
SSHD_CONFIG=/etc/ssh/sshd_config

# helper functions
function tablize {
        awk '{printf("| %-7s | %-51s |\n", $1, $3)}'
}
LINE="+---------+-----------------------------------------------------+"

# header
echo $LINE
echo "Cipher" "Fingerprint" "Fingerprint" | tablize
echo $LINE

# fingerprints
for host_key in $(awk '/^HostKey/ {sub(/^HostKey\s+/,"");print $0".pub"};' $SSHD_CONFIG); do
        cipher=$(echo $host_key | sed -r 's/^.*ssh_host_([^_]+)_key\.pub$/\1/'| tr '[a-z]' '[A-Z]')
        if [[ -f "$host_key" ]]; then
                md5=$(ssh-keygen -l -f $host_key -E md5 | awk '{print $2}')
                sha256=$(ssh-keygen -l -f $host_key | awk '{print $2}')
                art_sha256=$(ssh-keygen -lv -f $host_key | grep -v -w "256 SHA256" | grep -v -w "1024 SHA256" | grep -v -w "2048 SHA256")
                art_md5=$(ssh-keygen -lv -f $host_key -E md5 | grep -v "256 MD5" | grep -v "1024 MD5" | grep -v "2048 MD5")

                echo $cipher MD5 $md5 | tablize
                echo $cipher SHA-256 $sha256 | tablize
                echo $art_sha256 | tablize
                echo $art_md5 | tablize
                echo $LINE
        fi
done

... लेकिन मैं वास्तव में एक प्रोग्रामर नहीं हूं और स्क्रिप्ट उम्मीद के मुताबिक काम नहीं करती है। सराहना करेंगे अगर कोई भी ठीक करने में मदद कर सकता है (सफाई भी)। वहाँ और अधिक कुशलता से अंतरिक्ष का उपयोग करने के लिए कंधे से कंधा मिलाकर sh256 और md5 यादृच्छिक कला छवियों के लिए अच्छा होगा। मैंने md5 और sha256 कमांड को भी संशोधित किया क्योंकि मूल लोगों ने मेरे लिए काम नहीं किया (शायद बहुत नई प्रणाली) - केवल sha256 को तालिका में "=" संकेत के साथ प्रकट किया गया था जो वास्तविक फिंगरप्रिंट का हिस्सा नहीं था और इसे हटा नहीं सका।

(क्षमा करें, मैं हाल ही में पंजीकृत के रूप में टिप्पणी नहीं कर सकता)


यदि आपके पास कोई नया प्रश्न है, तो कृपया प्रश्न पूछें बटन पर क्लिक करके इसे पूछें । इस प्रश्न का लिंक शामिल करें यदि यह संदर्भ प्रदान करने में मदद करता है।
डोनाल्ड डक

अच्छी तरह से - जैसा कि आप देखते हैं - यह एक नया सवाल नहीं है, लेकिन वास्तव में यह स्वीकार करते हुए कि प्रस्तावित स्क्रिप्ट अपेक्षित और नया नहीं है और अभी भी पूर्ण संस्करण प्रस्तावित नहीं किया गया है। मैं मौजूदा स्क्रिप्ट को संशोधित कर सकता हूं इसलिए यह उम्मीद के मुताबिक काम करता है लेकिन मैंने यादृच्छिक कला को जोड़ने की कोशिश की और यह हिस्सा पूरा नहीं हुआ। वास्तव में एक प्रस्ताव है कि कुछ सार्वजनिक कुंजी और प्रस्तावित कुंजी की तुलना कैसे की जाए लेकिन यह संस्करण MITM- प्रूफ नहीं है: ssh-keyscan -t ecdsa xxx.xxx.xxx.xxx | ssh-keygen -lv -f - && ssh -X -o VisualHostKey = yes -i ~ / .shsh / key user@xxx.xxx.xxx.xxx
zeroconf

मैंने आपकी टिप्पणियाँ नहीं देखीं, लेकिन आज मुझे वही विचार मिला, इसलिए मेरा उत्तर अब अधिक हाल के ओपनएसएसएच संस्करणों के लिए काम करने वाले संस्करण के साथ अपडेट किया गया है, एएससीआईआई शामिल हैं।
केपी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.