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


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

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 फ़िंगरप्रिंट प्रदान करने के लिए सर्वर व्यवस्थापक को बगैर किए बिना)?


107
2018-06-18 14:18


मूल




जवाब:


पहले फिंगरप्रिंट को हेक्सड एमडी 5 हैश के रूप में दिया गया था। के साथ शुरू ओपनएसएसएच 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

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

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

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

  • के साथ कुंजी डाउनलोड करें 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 (वर्तमान ओपनएसएसएच पर एमडी 5)
  • awk '{print $2}' ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 (पुराने ओपनएसएसएच पर sha256)
  • (आपको लाइन को शुरू करने की आवश्यकता हो सकती है awk '{print $3}' ssh-keyscan के नए संस्करणों के लिए क्योंकि प्रारूप बदल गया)

144
2018-06-18 14:18



अगर आपको वहां पहुंच है तो क्या आपको पता चल जाएगा कि सर्वर पर sha256 फिंगरप्रिंट कैसे प्राप्त कर सकता हूं? ssh-keygen -lf  सर्वर पर मुझे केवल एमडी 5 प्रिंट देता है, और मेरे जीवन के लिए मुझे यह नहीं पता कि sha256 को मैन पेज या www में कैसे प्राप्त किया जा सकता है ... - codeling
मैंने जवाब में sha256sum का उपयोग करके ओपनएसएसएच कुकबुक से छीन लिया। - JonnyJD
धन्यवाद, आप एक ऐसा उत्तर देने वाले अकेले हैं जिनके पास वास्तविक मूल्य है। - Florian Heigl
दुर्भाग्य से मुझे आपके उपयोग करते समय एक अलग SHA-256 हैश मिलता है awk 1-लाइनर (मेरे क्लाइंट द्वारा दिखाए गए हैश से मेल नहीं खाता है) - Jonathan Cross
नोट के लिए धन्यवाद, दो संभावित समस्याएं थीं: 1) कुछ मेजबानों में एकाधिक कुंजी होती हैं, अजीब रेखा केवल एक के साथ काम करती है) एसएसएच-कीकेन के हाल के संस्करण एक अलग प्रारूप का उपयोग करते हैं, इसलिए किसी को $ 2 के बजाय $ 3 का उपयोग करना पड़ता है। (दोनों एक संपादन के साथ तय) - JonnyJD


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

 +---------+---------+-----------------------------------------------------+
 | 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 विकल्प जोड़ा गया था)।

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

#!/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जवाब धन्यवाद।


23
2018-01-24 21:23



मैंने इसे और अधिक मजबूत और बेहतर कार्यक्षमता बना दिया; संस्करण 0.3 (चेंजलॉग के साथ) यहां: github.com/unixnut/scripts/blob/master/ssh_fprint इसे लिखने के लिए धन्यवाद, यह कमाल है! - Alastair Irvine


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


4
2018-01-08 06:29



यह सब पहले से ही पिछले जवाब में पहले से स्वरूपित है। - Jakuje


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

# 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

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

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


0
2017-07-02 22:23



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


निम्नलिखित एक-लाइनर काम करता है Ubuntu 16.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-

0
2017-12-12 11:34