سؤال SHA256 ssh بصمة قدمها العميل ولكن فقط بصمة md5 المعروفة للخادم


عند الاتصال بخادم جديد / غير معروف (مع OpenSSH حديث) ، على سبيل المثال:

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


الأصل




الأجوبة:


في وقت سابق أعطيت بصمة مثل تجزئة MDX عقيمة. بدءا من OpenSSH 6.8 يتم الآن عرض بصمة كـ base64 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

نأمل أن يقدم مسؤولو الخادم كلا النوعين من بصمات الأصابع في المستقبل القريب.

تصحيح:

على النحو الوارد في منتديات Arch Linux، هناك أيضًا خيار ثالث:

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 (التجزئة التجزئة ، اعتمادا على إصدار OpenSSH)
  • ssh-keygen -l -f key.pub -E md5 (md5 على OpenSSH الحالي)
  • awk '{print $2}' ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 (sha256 على OpenSSH القديمة)
  • (قد تحتاج إلى بدء الخط مع awk '{print $3}' للإصدارات الأحدث من ssh-keyscan نظرًا لتغيير التنسيق)

144
2018-06-18 14:18



هل تعرف كيف يمكنني الحصول على بصمة sha256 على الخادم في حالة الوصول إلى هناك؟ ssh-keygen -lf  على الخادم فقط يعطيني الطباعة MD5 ، وبالنسبة لي حياة لا أستطيع أن أجد كيفية الحصول على واحد sha256 إما في صفحات الرجل أو شبكة الاتصالات العالمية حتى الآن ... - codeling
أضفت قصاصة من OpenSSH Cookbook باستخدام sha256sum للإجابة. - JonnyJD
شكرا لك ، أنت الوحيد الذي يعطي إجابة ذات قيمة فعلية. - Florian Heigl
للأسف أحصل على تجزئة SHA-256 مختلفة عند استخدام الخاص بك awk 1-بطانة (لا تتطابق مع التجزئة المعروضة من قبل موكلي) - Jonathan Cross
شكرا للملاحظة ، كانت هناك مشكلتان محتملتان: 1) بعض المضيفين لديهم مفاتيح متعددة ، خط awk يعمل فقط مع واحد 2) تستخدم الإصدارات الأخيرة من ssh-keyscan تنسيق مختلف ، لذلك على المرء أن يستخدم 3 دولار بدلا من 2 دولار. (كلاهما ثابت مع تحرير) - JonnyJD


مجرد خلق برنامج نصي bash صغير الذي سيتم طباعة الجدول مع بصمات الأصابع لجميع الأصفار الرئيسية المسموح بها على الخادم (وفقا ل /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 التي بدلت الأصفار الافتراضية الآن مع دعم صور آسكي.

#!/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


اتضح ssh-keygen (في وقت ما بعد الإصدار 6.6 ؛ يفترض 6.8) -E md5 الخيار الذي سيؤدي إلى طباعة بصمة بصمة md5. لذا ، إذا تمكنت من الاستيلاء على ملف المفتاح العام للخادم بشكل مستقل ، فيمكنك إدخاله 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
حسناً - كما ترون - إنه سؤال ليس جديداً ولكن في الحقيقة يعترف بأن النص المقترح لم يعمل كما هو متوقع ، وتم اقتراح نسخة جديدة وما زالت لم تكتمل بعد. يمكنني تعديل البرنامج النصي الموجود بحيث يعمل كما هو متوقع ولكن حاولت إضافة الرسم العشوائي ولم يكتمل معرف الجزء هذا. في الواقع هناك اقتراح واحد لمقارنة مفتاح عام معين وعرض المفتاح ولكن هذا البديل ليس MITM-proof: 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
لم أكن أرى تعليقاتك ولكن اليوم حصلت على نفس الفكرة ، لذلك يتم تحديث إجابتي الآن مع نسخة العمل لإصدارات أحدث OpenSSH ، وشملت الفن ASCII. - 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