รับลายนิ้วมือคีย์ SSH ในรูปแบบ hex (เก่า) กับ openssh เวอร์ชันใหม่


40

ดูเหมือนว่า openssh ได้เปลี่ยนวิธีการแสดงลายนิ้วมือที่สำคัญ

ฉันพยายาม ssh จากเครื่องไคลเอ็นต์ไปยังเซิร์ฟเวอร์:

  • ลูกค้า: Ubuntu 14.04 ใช้งาน OpenSSH 6.6.1
  • เซิร์ฟเวอร์: FreeBSD กำลังเรียกใช้ OpenSSH 7.2p2

ลูกค้ารายงานแฮช md5 ของคีย์เซิร์ฟเวอร์เป็นลำดับเลขฐานสิบหก 16 คู่ดังนี้:

a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

เซิร์ฟเวอร์ใช้ค่าเริ่มต้นในการใช้แฮช sha256 แต่ต้องขอบคุณคำตอบนี้ฉันสามารถบังคับให้แฮช sha1 ทำได้โดยการเรียกใช้:

[root@host /etc/ssh]# ssh-keygen -l -E sha1 -f ssh_host_ecdsa_key.pub

ฉันต้องการให้ผลลัพธ์เป็นแบบนี้:

a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

แต่ฉันได้รับสิ่งนี้แทน:

256 SHA1:KIh0ejR4O+RqrSq7JdGAASddRfI root@host.local (ECDSA)

สำหรับฉันแล้วดูเหมือนว่าลายนิ้วมือที่เข้ารหัส base64 จะถูกแสดงแทนเลขฐานสิบหก

ฉันจะรับเช็คซัมของคีย์เซิร์ฟเวอร์ในรูปแบบเดียวกับที่รายงานโดยไคลเอนต์ (เก่ากว่า) (เลขฐานสิบหกที่คั่นด้วยโคลอน, แฮช sha1) เพื่อตรวจสอบว่าเหมือนกันได้อย่างไร

แก้ไข: SSH เวอร์ชั่นเก่าให้การตรวจสอบmd5 ไม่ใช่การตรวจสอบ sha1 อย่างที่ฉันคิดผิด การใช้เช็คซัมนั้น (ตามคำตอบที่ยอมรับในขณะนี้ควรระบุ) ในตัวเลือก -E จะให้เอาต์พุตที่ต้องการ

คำตอบ:


52

ลูกค้ารายงานแฮช sha1 ของคีย์เซิร์ฟเวอร์เป็นลำดับเลขฐานสิบหก 16 คู่ดังนี้:

    a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

นี่คือ MD5 แฮช

ในขณะที่คุณสามารถเห็นการทำงาน

ssh-keygen -l -E md5 -f ssh_host_ecdsa_key.pub

คุณจะได้ลายนิ้วมือเดียวกับที่คุณต้องการโดยไม่มีฮาราคีรี่ที่คุณอธิบายในคำตอบของคุณ


1
น่าเสียดายที่นี่ใช้งานไม่ได้ คำถามของฉันมีผลลัพธ์ของการรันคำสั่งที่คุณแนะนำ รุ่นที่ใหม่กว่าของ ssh-keygen ให้แฮช md5 เป็นสตริง (เข้ารหัส base64?) แทนที่จะเป็นสตริงฐานสิบหก "ทุกสิ่งที่ฮาราคีรี" (คำอธิบาย apt!) เป็นวิธีที่ง่ายที่สุดที่ฉันสามารถหาได้จากสตริง hex แบบเก่าจากเครื่องมือ openssh เวอร์ชันใหม่
สุ่ม

เว้นแต่ว่า FreeBSD จะทำลายบางสิ่ง (หรือลบการสนับสนุน MD5) ไม่มีเหตุผลว่าทำไมมันไม่ควรทำงาน โปรดทราบว่าคำสั่งของคุณแสดงรายการผิดsha1แทนที่จะเป็นmd5! ฉันใช้ Ubuntu รุ่นเก่ากับ openssh-6.9 แต่ใช้งานได้ดี
Jakuje

1
md5 แทนที่จะเป็น sha1 ... ไม่แน่ใจว่าฉันพลาดมันไปได้อย่างไร นั่นจะให้ผลลัพธ์ที่ตรงกัน
สุ่ม

ฉันมีปัญหาตรงข้าม ฉันมี md5 และต้องการรูปแบบอื่น ฉันจะรับมันได้อย่างไร
Gabriel Staples

1
ทำงานเมื่อคำสั่งถูกเรียกใช้บน ubuntu ไม่ทำงานเมื่อดำเนินการคำสั่งกับ centos
Marinos

5

เมื่อมันปรากฏออกมาSSH Cookbookมีวิธีสร้างคีย์ด้วยตนเองในรูปแบบฐานสิบหกที่เก่ากว่า ฉันใช้สิ่งนี้กับเซิร์ฟเวอร์ freebsd

awk '{พิมพ์ $ 2}' key.pub | base64 -d | md5 | sed 's /../&:/ g; s /:. * $ // '

ทำลายมันลง:

awk '{พิมพ์ $ 2}' key.pub

พิมพ์คอลัมน์ที่สอง (คั่นด้วยช่องว่าง) ใน "key.pub" ซึ่งเป็นกุญแจ

base64 -d

กุญแจสำคัญคือการเข้ารหัส base64 นี่จะเอาต์พุตไบต์ที่แท้จริงของคีย์

md5

นี่คือ freebsd ที่เทียบเท่ากับ 'md5sum -b' ที่ระบุในสูตรในหน้า ssh cookbook

sed 's /../&:/ g; s /:. * $ // '

มีสองคำสั่ง sed ที่นี่:

s /../&:/ กรัม

แทนที่ตัวละครทุกคู่ในบรรทัด (ขอบคุณธง 'g' ในตอนท้าย) ด้วยคู่เดียวกันนั้นตามด้วยเครื่องหมายโคลอน

s /:. * $ // '

ลบเครื่องหมายจุดคู่ท้ายใด ๆ (แทนที่เครื่องหมายจุดคู่แล้วตามด้วยช่องว่างตามด้วยเครื่องหมายใดก็ได้จนถึงส่วนท้ายของบรรทัดโดยไม่มีอะไร)


4

ในกรณีเช่นนี้ฉันใช้สคริปต์เล็กน้อยต่อไปนี้ (ทดสอบบน Debian และ Ubuntu):

#!/bin/sh

# Gather the public ssh host keys for the given host
# and for each key print the fingerprint in hex format using the given
# checksum command (e.g. md5sum, sha256sum, ...)

if [ "$#" != 2 ]; then
  echo "usage: $0 hostname checksum_command"
  exit 1
fi

ssh-keyscan $1 2>/dev/null | while read -r line; do
  echo "Scanned key:"
  echo $line
  echo "$2 fingerprint:"
  echo $line | awk '{print $3}' | base64 -d | $2 -b | awk '{print $1}' | sed 's/../&:/g' | sed 's/:$//'
  echo
done

ตัวอย่างการใช้งาน:

$ myscript host.example.com md5sum
Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
md5sum fingerprint:
6c:ef:26:f7:98:ad:ed:5b:cc:ff:83:13:46:c9:f6:79

Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
md5sum fingerprint:
b2:9c:cd:30:b1:38:e3:d1:17:d6:73:eb:03:9a:80:83

$ myscript host.example.com sha256sum
Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
sha256sum fingerprint:
f4:61:58:e4:90:65:c4:70:98:7f:d1:40:0a:d8:d9:79:14:e6:91:dc:b6:ed:91:8c:c0:df:d9:65:db:dd:a0:18

Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
sha256sum fingerprint:
4b:73:d1:d7:80:87:46:64:56:71:64:10:7a:66:83:9b:c7:58:39:0b:16:74:dd:9b:d9:4b:e5:d5:61:7e:99:45
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.