Müşteri tarafından verilen SHA256 ssh parmak izi, ancak yalnızca sunucu için bilinen md5 parmak izi


118

Yeni / bilinmeyen bir sunucuya bağlanırken (en son OpenSSH ile), örneğin:

ssh example.com

Aşağıdaki gibi parmak izi alıyorsunuz:

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)?

Ancak, parmak izi genellikle sunucuya şu biçimde verilir:

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

Özgünlüğü nasıl kontrol edebilirim (bir SHA256 parmak izi sağlamak için sunucu yöneticilerini zorlamadan)?


Yanıtlar:


151

Daha önce parmak izi altıgen bir md5 karma olarak verilmişti. OpenSSH 6.8 ile başlayarak , parmak izi şimdi base64 SHA256 (varsayılan olarak) olarak görüntüleniyor. Bunları doğrudan karşılaştıramazsın.

Ayrıca yeni bir yapılandırma seçeneği eklediler FingerprintHash. Koyabilirsin

FingerprintHash md5

Gözlerinde farklı ~/.ssh/configeski (dönmek daha az güvenli ) varsayılan ya da sadece tek kişi için bu seçeneği kullanın:

ssh -o FingerprintHash=md5 example.org

hangi parmak izi verecek

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

Umarım sunucu yöneticileri yakın gelecekte her iki parmak izi türünü de sağlarlar.

DÜZENLE:

Arch Linux forumlarında verildiği gibi üçüncü bir seçenek daha var:

Host example.org
    FingerprintHash md5

DÜZENLE:

OpenSSH Yemek Kitabında verilen şekilde isteğe bağlı bir anahtarın hash değerini oluşturabilirsiniz :

Anahtarı al:

  • ile anahtarı indir ssh-keyscan example.org > key.pub
  • veya: sunucudaki anahtarları bulun /etc/ssh

Karma oluştur:

  • Yalnızca bir satır / türü olduğundan emin olun, yani ya bütün diğerlerini silin key.pubveya koşmakssh-keyscan -t rsa example.org > key.pub
  • ssh-keygen -l -f key.pub (OpenSSH sürümüne bağlı olarak varsayılan karma)
  • ssh-keygen -l -f key.pub -E md5 (mevcut OpenSSH'de md5)
  • awk '{print $2}' ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 (eski OpenSSH'de sha256)
  • ( awk '{print $3}'Format değiştiğinden ssh-keyscan'ın daha yeni sürümleri için çizgiyi başlatmanız gerekebilir )

4
Oraya girme ihtimalim durumunda sunucuda sha256 parmak izini nasıl alabileceğimi biliyor musunuz? ssh-keygen -lf Sunucu yalnızca bana md5 baskı verir ve bana süresince ben SHA256 kimsenin de adamı sayfalarında veya şimdiye kadar www ... nasıl bulamıyor üzerinde
codeling

6
OpenSSH Yemek Kitabından sha256sum kullanarak bir cevap ekledim.
JonnyJD

2
teşekkür ederim, gerçek değeri olan bir cevap veren tek kişisin.
Florian Heigl

1
Ne yazık ki awk1-liner'ınızı kullanırken farklı bir SHA-256 karma alıyorum (müşterim tarafından gösterilen karma ile eşleşmiyor)
Jonathan Cross

2
sha256sum -b | awk '{print $1}' | xxd -r -popenssl sha256 -binarytakılı vim gerektirmeden değiştirilebilir . Ortaya çıkan komut satırı olacaktır:awk '{print $2}' ~/.ssh/id_rsa.pub | base64 -d | openssl sha256 -binary | base64
Alexander Tumin

27

Sadece (uygun sunucuda izin tüm önemli şifrelerin parmak izleriyle tabloyu yazdırır küçük bash komut dosyasını oluşturan /etc/ssh/sshd_confighem de) SSH-256ve MD5algo. İşte bir örnek çıktı:

 +---------+---------+-----------------------------------------------------+
 | 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]-----+

Komut dosyası, SSHsürümü aşağıda bulunan sunucularda da çalışacaktır 6.8( -E md5seçenek eklenmeden önce ).

Düzenleme: Varsayılan şifreleri şimdi ASCII görüntü desteği ile değiştiren SSH'nin daha yeni sürümleri için güncellenmiş sürümler.

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

Bu sadece JonnyJD'ın cevabındaki bilgileri kullanarak çok güzel bir baskı . Teşekkürler.


1
Ben biraz daha sağlam ve gelişmiş işlevsellik yaptım; Burada sürüm 0.3 (changelog ile): github.com/unixnut/scripts/blob/master/ssh_fprint Bunu yazdığınız için teşekkürler, bu harika!
Alastair Irvine

6

ssh-keygen'in ortaya çıktığını (bazen 6.6 sürümünden sonra; muhtemelen 6.8), -E md5parmak izini md5 parmak izi olarak yazdırmasına neden olacak bir seçeneğe sahip. Böylece, sunucunun ortak anahtar dosyasını bağımsız olarak kaparsanız, onu besleyebilir ssh-keygen -E md5 -l -f ssh_host_rsa_key.pubve tanıdık parmak izinizi alabilirsiniz.


2
bunların hepsi zaten iyi biçimlendirilmiş bir önceki cevapta.
Jakuje

3

Aşağıdaki tek astar çalışır (en azından) Ubuntu 16.04,18.04 / Centos >= 7

(Sunucularla test edildi: 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-

Çıktı:

# 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

tabloya rastgele sanat da dahil etmek için değiştirmeye çalıştı:

# 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

... ama aslında bir programcı değilim ve senaryo beklendiği gibi çalışmıyor. Birisi düzeltmek için yardımcı olabilir (ayrıca temizleme) takdir ediyorum. Alanı daha verimli kullanmak için sha256 ve md5 rasgele sanat resimlerinin yan yana olması güzel olurdu. Orijinalleri benim için çalışmadığı için md5 ve sha256 komutlarını da değiştirdim (muhtemelen çok yeni bir sistem) - sadece gerçek parmak izinin bir parçası olmayan ve onu kaldıramayan "=" işareti bulunan tablodaki sha256 görünüyordu.

(üzgünüm yakın zamanda kayıt yaptırdığım için yorum yapamadım)


Yeni bir sorunuz varsa, lütfen Soru Sor düğmesine tıklayarak sorun . Bağlam sağlamaya yardımcı oluyorsa, bu soruya bir bağlantı ekleyin.
Donald Duck

Şey - gördüğünüz gibi - bu yeni bir soru değil ama aslında önerilen komut dosyasının beklendiği gibi çalışmadığını ve yeni ve henüz tamamlanmamış bir sürüm önerildiğini kabul etmek. Var olan betiği beklendiği şekilde çalıştırabilirim ancak rastgele resmi eklemeye çalıştım ve bu bölüm kimliği tamamlanmadı. Aslında, bazı ortak anahtarların ve sunulan anahtarın nasıl karşılaştırılacağına dair bir öneri var, ancak bu değişken MITM kanıtı değil: ssh-keyscan -t ecdsa xxx.xxx.xxx.xxx | ssh-keygen -lv -f - && ssh -X -o VisualHostKey = evet -i ~ / .ssh / anahtar user@xxx.xxx.xxx.xxx
zeroconf

Yorumlarınızı görmedim ancak bugün aynı fikre sahibim, bu yüzden cevabım şimdi daha yeni OpenSSH sürümleri için çalışan sürümüyle güncelleniyor, ASCII resimleri dahil.
Kepi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.