คำนวณลายนิ้วมือคีย์ RSA


903

ฉันต้องทำการตรวจสอบคีย์ SSH สำหรับ GitHub แต่ฉันไม่แน่ใจว่าจะหาลายนิ้วมือคีย์ RSA ของฉันได้อย่างไร ฉันเริ่มตามแนวทางในการสร้างคีย์ SSH บน Linux

คำสั่งที่ฉันต้องป้อนเพื่อค้นหาลายนิ้วมือคีย์ RSA ปัจจุบันของฉันคืออะไร


21
FWIW ฉันกลับมาที่โพสต์นี้ต่อไปเพราะ github เป็นที่ที่ฉันเห็นลายนิ้วมือบนปุ่มและฉันต้องการให้แน่ใจว่าฉันใช้กุญแจส่วนตัวที่สอดคล้องกัน อาจจะรับประกันแท็ก GitHub เนื่องจากโพสต์นี้ช่วยสอบถาม GitHub ที่เกี่ยวข้อง?
hamx0r

4
@ hamx0r ผมกลับมาที่โพสต์นี้เพราะ Gitlab ยังใช้ลายนิ้วมือที่ ...
เรย์ฟอสส์

1
ฉันมาที่นี่เพราะเทรวิสซึ่งใช้มันเช่นกัน : D
ต่อ Lundberg

4
สำหรับผู้ที่ใช้ลีนุกซ์ที่ "กลับมาที่หน้านี้อีกครั้ง" ให้คัดลอกไปยัง bashrc ของคุณ: function fingerprint() { ssh-keygen -lf $1 -E md5 }จากนั้น (หลังจากที่คุณส่ง bashrc) คุณจะได้รับลายนิ้วมือด้วยfingerprint ~/.ssh/key_file
Jeff Diederiks

1
สำหรับผู้ที่พยายาม @JeffDiederiks ฟังก์ชั่นและสงสัยว่าทำไมมันไม่ทำงานฟังก์ชั่นทุบตีต้องต่อท้าย;ในร่างกายเพื่อใช้function fingerprint() { ssh-keygen -lf $1 -E md5; }แทน
tjjfvi

คำตอบ:


1261

เรียกใช้คำสั่งต่อไปนี้เพื่อเรียกค้นลายนิ้วมือ SHA256 ของคีย์ SSH ของคุณ ( -lหมายถึง "รายการ" แทนที่จะสร้างคีย์ใหม่-fหมายถึง "ชื่อไฟล์"):

$ ssh-keygen -lf /path/to/ssh/key

ตัวอย่างเช่นบนเครื่องของฉันคำสั่งที่ฉันใช้คือ (ใช้รหัสสาธารณะ RSA):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

ในการรับรูปแบบลายนิ้วมือ GitHub (MD5) ด้วย ssh-keygen เวอร์ชันใหม่ให้รัน:

$ ssh-keygen -E md5 -lf <fileName>

ข้อมูลโบนัส:

ssh-keygen -lfยังทำงานบนknown_hostsและauthorized_keysไฟล์

หากต้องการค้นหากุญแจสาธารณะส่วนใหญ่บนระบบ Linux / Unix / OS X ให้เรียกใช้

$ find /etc/ssh /home/*/.ssh /Users/*/.ssh -name '*.pub' -o -name 'authorized_keys' -o -name 'known_hosts'

(หากคุณต้องการเห็นภายใน homedirs ของผู้ใช้คนอื่นคุณจะต้องเป็น root หรือ sudo)

สิ่งssh-add -lนี้คล้ายกันมาก แต่แสดงรายการลายนิ้วมือของกุญแจที่เพิ่มให้กับตัวแทนของคุณ (ผู้ใช้ OS X รับทราบว่าเวทมนตร์ SSH ที่ไม่มีรหัสผ่านผ่านทาง Keychain ไม่เหมือนกับการใช้ ssh-agent)


5
ฉันจะค้นหาเส้นทางได้อย่างไร
pal4life

4
เนื่องจากตัวอย่างลายนิ้วมือหกเหลี่ยมของคุณคือตัวเลข 32 หลักฉันเชื่อว่ามันจะเป็นลายนิ้วมือ MD5 ใช่ไหม? ตรงกันข้ามกับลายนิ้วมือ 40 หลักซึ่งจะระบุ SHA1
culix

8
ในระบบที่ไม่ใช่อูบุนตูไฟล์ที่เกี่ยวข้องอาจอยู่ใน / etc / ssh เช่น /etc/ssh/ssh_host_rsa_key.pub
Zorawar

12
น่าสังเกตว่าลายนิ้วมือควรจะเหมือนกันสำหรับทั้งสองคีย์ในคีย์สาธารณะ / ส่วนตัว เพื่อให้ลายนิ้วมือของที่ควรจะเป็นเช่นเดียวกับหนึ่งสำหรับ.ssh/id_rsa .ssh/id_rsa.pubดังนั้นคุณสามารถใช้อย่างใดอย่างหนึ่ง (และถ้าคุณชอบฉันและรักแท็บเสร็จมันทำให้งานใช้เวลา 2 การกดแป้นพิมพ์ที่มีประสิทธิภาพน้อยลง!
คู่ปรับ Shot

25
การใช้งานssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubถ้าคุณไม่ต้องการมาตรฐานSHA256เอาท์พุท
user8162

675

คำสั่ง SSH ที่ใหม่กว่าจะแสดงรายการลายนิ้วมือเป็นคีย์SHA256

ตัวอย่างเช่น:

ssh-keygen -lf ~/.ssh/id_dsa.pub 
1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)

หากคุณต้องการเปรียบเทียบกับลายนิ้วมือเก่าคุณต้องระบุเพื่อใช้ฟังก์ชันการแปลงลายนิ้วมือMD5

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub
2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)

ยังมีอยู่: -E sha1

อัปเดต ... ใช่ ... ใช่ ... ฉันรู้ ... ไม่ควรใช้คีย์ DSA สำหรับ SSH อีกต่อไปคีย์ RSA รุ่นเก่าหรือคีย์ ecliptic ที่ใหม่กว่าควรใช้แทน

สำหรับผู้ดูแลระบบที่คอยแก้ไขคำสั่งที่ฉันใช้ในด้านบน หยุดการเปลี่ยนแปลงมัน! คุณสร้างคำสั่งและผลลัพธ์ที่ได้ผิดพลาด!


6
เป็นมูลค่าการกล่าวถึงที่นี่ที่คุณสามารถบอกsshให้แสดงลายนิ้วมือ MD5 เก่าของเซิร์ฟเวอร์โดยใช้ssh -o FingerprintHash=md5 example.orgดังที่กล่าวไว้ในคำตอบนี้ (ฉันเพิ่งค้นหาสิ่งนั้นและคำตอบนี้นำฉันไปสู่สิ่งนั้นดังนั้นฉันคิดว่าคนอื่น ๆ อาจมีประสบการณ์ที่คล้ายคลึงกัน)
Jonathan Y.

25
คำตอบนี้มีประโยชน์มากที่สุดสำหรับผู้ที่ต้องการเปรียบเทียบกุญแจกับสิ่งที่ github.com แสดง (เช่น MD5 มีรูปแบบเป็น
เลข

2
ยังมีประโยชน์มากสำหรับสิ่งที่เปรียบเทียบกับสิ่งที่โป๊วจะรายงาน
pjcard

27

หากต้องการดูคีย์ของคุณบน Ubuntu เพียงป้อนคำสั่งต่อไปนี้บนเทอร์มินัลของคุณ:

ssh-add -l

คุณจะได้ผลลัพธ์ดังนี้: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName @ ubuntu (RSA)

หากคุณได้รับข้อผิดพลาดเช่น; Could not open a connection to your authentication agent.
หมายความว่า ssh-agent ไม่ทำงาน คุณสามารถเริ่ม / เรียกใช้ด้วย: ssh-agent bash(ขอบคุณ @Richard ในความคิดเห็น) จากนั้นเรียกใช้อีกครั้งssh-add -l


5
หากคุณไม่ได้อยู่บน Ubuntu คุณอาจได้รับสิ่งนี้โชคไม่ดี "ไม่สามารถเปิดการเชื่อมต่อกับตัวแทนการตรวจสอบสิทธิ์ของคุณ"
rogerdpack

1
ใช้งานได้เฉพาะเมื่อคุณเปิดใช้งานตัวแทนการตรวจสอบความถูกต้อง
Rufflewind

เพื่อให้ตัวแทนการรับรองความถูกต้องทำงานคุณสามารถใช้ssh-agent bashและดำเนินการต่อไปได้ ในชีวิตเช่นเคย; ssh-agentไม่รับประกันว่าจะมีการใช้งานที่สอดคล้องกันในทุกระบบ
Richard Kenneth Niescior

เคล็ดลับสำหรับ linux อีก; ตัวเลือก -F (ทิ้งลายนิ้วมือ) ของ ssh-keygen-g3 จะแสดงลายนิ้วมือของคีย์: $ ssh-keygen-g3 -F /path/to/keyfile.pub answers.ssh.com/questions/494/ …
AnneTheAgile

18

คู่กุญแจ (กุญแจส่วนตัวและกุญแจสาธารณะ) จะมีลายนิ้วมือเหมือนกัน ดังนั้นในกรณีที่คุณจำไม่ได้ว่าคีย์ส่วนตัวใดเป็นของคีย์สาธารณะค้นหาการจับคู่โดยการเปรียบเทียบลายนิ้วมือ

คำตอบที่ได้รับการโหวตมากที่สุดโดย Marvin Vinto ให้ลายนิ้วมือของไฟล์กุญแจ SSH สาธารณะ ลายนิ้วมือของคีย์ SSH ส่วนตัวที่เกี่ยวข้องยังสามารถสอบถามได้ แต่ต้องใช้ขั้นตอนต่อไปตามลำดับที่แสดงด้านล่าง

  1. โหลดเอเจนต์ SSH หากคุณยังไม่ได้ดำเนินการ วิธีที่ง่ายที่สุดคือการเรียกใช้

    $ ssh-agent bash
    

    หรือ

    $ ssh-agent tcsh
    

    (หรือเชลล์อื่นที่คุณใช้)

  2. โหลดคีย์ส่วนตัวที่คุณต้องการทดสอบ:

    $ ssh-add /path/to/your-ssh-private-key
    

    คุณจะถูกขอให้ป้อนข้อความรหัสผ่านหากคีย์มีการป้องกันด้วยรหัสผ่าน

  3. ทีนี้อย่างที่คนอื่นพูดกันพิมพ์

    $ ssh-add -l
    1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
    

    fd:bc:...คือลายนิ้วมือที่คุณเป็น หากมีหลายปุ่มจะพิมพ์หลายบรรทัดและบรรทัดสุดท้ายจะมีลายนิ้วมือของคีย์ที่โหลดล่าสุด

  4. หากคุณต้องการหยุดตัวแทน (เช่นถ้าคุณเรียกใช้ขั้นตอนที่ 1 ด้านบน) จากนั้นพิมพ์ `exit 'บนเชลล์และคุณจะกลับมาที่เชลล์ก่อนที่จะโหลดเอเจนต์ ssh

ฉันไม่ได้เพิ่มข้อมูลใหม่ แต่หวังว่าคำตอบนี้ชัดเจนสำหรับผู้ใช้ทุกระดับ


ย่อหน้าแรกไม่จริงssh-add -lและssh-keygen -lคืนลายนิ้วมือเดียวกันสำหรับคู่คีย์ที่กำหนด นอกจากนี้ควรเป็นตัวพิมพ์เล็ก-lไม่ใช่ตัวพิมพ์ใหญ่
Albertas Agejevas

ฉันไม่ได้แข่งขันssh-add -lและssh-keygen -lคืนลายนิ้วมือเดียวกันสำหรับคู่คีย์ที่กำหนด แต่ฉันไม่เข้าใจว่าเกิดอะไรขึ้นกับข้อความต้นฉบับของฉันในวรรคแรก ฉันเพิ่มประโยคเพื่อชี้แจง
Wirawan Purwanto

1
มันง่ายกว่าที่จะชี้ ssh-keygen ไปที่คีย์แทนที่จะเริ่มต้นเอเจนต์จากนั้นโหลดคีย์จากนั้นรับลายนิ้วมือ
Albertas Agejevas

1
ssh-agentถ้าคุณมีคีย์ส่วนตัวเท่านั้นคุณไม่จำเป็นต้องวิ่ง สมมติว่าPRIVKEYได้รับการตั้งค่าให้เป็นไฟล์กุญแจส่วนตัวและPUBKEYได้รับการตั้งค่าให้เป็นไฟล์สาธารณะ (ตอนแรกที่ไม่มีอยู่) ให้ทำ: ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"เพื่อสร้างรหัสสาธารณะ SSH ใหม่ssh-keygen -E md5 -l -v -f "${PUBKEY}"หากคุณต้องการแฮช MD5 หรือเพียงแค่ssh-keygen -l -v -f "${PUBKEY}"ต้องการแฮช SHA-256 (SHA-256 เป็นค่าเริ่มต้นทันที)
David Tonhofer

12

วิธีที่เร็วที่สุดหากคีย์ของคุณอยู่ในตัวแทน SSH:

$ ssh-add -L | ssh-keygen -E md5 -lf /dev/stdin

แต่ละคีย์ในตัวแทนจะถูกพิมพ์เป็น:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)

3
ต้องการวิธีที่รวดเร็วกว่าในการจับคู่กุญแจของฉันกับที่อยู่ในบัญชี GitHub ของฉันและคำตอบนี้ช่วยฉันได้
evanjs

11

ทำซ้ำเนื้อหาจากฟอรัม AWS ที่นี่เพราะฉันพบว่ามีประโยชน์กับกรณีการใช้งานของฉัน - ฉันต้องการตรวจสอบว่าคีย์ใดของฉันที่ตรงกับกุญแจที่ฉันนำเข้ามาใน AWS

openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c

โดยที่: - primary.pemเป็นกุญแจส่วนตัวในการตรวจสอบ


9
$ ssh-add -l 

จะทำงานบนMac OS X v10.8 (Mountain Lion) - v10.10 (Yosemite)

นอกจากนี้ยังสนับสนุนตัวเลือก-Eในการระบุรูปแบบลายนิ้วมือดังนั้นในกรณีที่จำเป็นต้องใช้ MD5 (มักใช้เช่น GitHub) เพียงเพิ่ม-E md5คำสั่ง


+1 สำหรับคำตอบที่ง่ายที่สุด จากman ssh-addตัวเลือก-lคือ "แสดงลายนิ้วมือของตัวตนทั้งหมดที่ตัวแทนในขณะนี้"
XavierStuvw

8

บน Windows หากคุณใช้PuTTY / Pageant ลายนิ้วมือจะแสดงรายการเมื่อคุณโหลดปุ่ม PuTTY (.ppk) ลงใน Pageant มันค่อนข้างมีประโยชน์ในกรณีที่คุณลืมว่าคุณใช้อันไหน

ป้อนคำอธิบายภาพที่นี่


3
ขอบคุณบางครั้งเราคน Linux ลืมเกี่ยวกับ windows โดยเฉพาะอย่างยิ่งเมื่อ OP กล่าวถึงสีโป๊ว
Jmons

@ DmitriR117 ทำไมคุณถึงวาดรหัสสาธารณะสีดำเนื่องจากเป็นที่รู้กันทั่วโลก?
Michu93

8

นี่คือฟังก์ชั่นเชลล์ที่ฉันใช้เพื่อรับการพิมพ์ลายนิ้วมือ SSH ของฉันสำหรับการสร้างหยดDigitalOcean :

fingerprint() {
    pubkeypath="$1"
    ssh-keygen -E md5 -lf "$pubkeypath" | awk '{ print $2 }' | cut -c 5-
}

ใส่ไว้ใน~/.bashrcแหล่งที่มาของคุณแล้วคุณจะได้รับลายนิ้วมือดังนี้

$ fingerprint ~/.ssh/id_rsa.pub
d2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9

2

หากตัวแทน SSH ของคุณกำลังทำงานอยู่นั่นก็คือ

ssh-add -l

เพื่อแสดงรายการลายนิ้วมือ RSA ของตัวตนทั้งหมดหรือ-Lเพื่อแสดงคีย์สาธารณะ

หากตัวแทนของคุณไม่ทำงานให้ลอง:

ssh-agent sh -c 'ssh-add; ssh-add -l'

และสำหรับกุญแจสาธารณะของคุณ:

ssh-agent sh -c 'ssh-add; ssh-add -L'

หากคุณได้รับข้อความ: ' ตัวแทนไม่มีตัวตน 'จากนั้นคุณต้องสร้างคีย์ RSA ของคุณssh-keygenก่อน


ฉันติดตั้ง openssh แล้วพยายามเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ putty กำลังแสดงลายนิ้วมือคีย์ ssh-ed25519 256 แต่ฉันได้รับข้อความ "ไม่มีตัวตน" คุณรู้หรือไม่ว่าสามารถค้นหาและแสดงคีย์นี้ได้จากที่ใด มีข้อเสียในการใช้คีย์นี้ vs การสร้างคีย์ RSA ใหม่หรือไม่
lordcheeto

/etc/ssh/ssh_host_ed25519_key.pubพบว่าภายใต้ ส่วนที่สองของคำถามยังคงอยู่: ข้อเสียใด ๆ ในการใช้คีย์ที่สร้างขึ้นอัตโนมัตินี้?
lordcheeto

1

บางครั้งคุณอาจมีพวงกุญแจในตัว ~/.sshไดเรกทอรีและไม่ทราบว่าตรงกับลายนิ้วมือที่แสดงโดย GitHub / Gitlab / etc

นี่คือวิธีแสดงชื่อไฟล์ที่สำคัญและลายนิ้วมือ MD5 ของคีย์ทั้งหมดใน~/.sshไดเรกทอรีของคุณ:

cd ~/.ssh
find . -type f -exec printf "\n{}\n" \; -exec ssh-keygen -E md5 -lf {} \;

(สำหรับความหมายของพารามิเตอร์อ้างถึงคำตอบนี้เกี่ยวกับfindคำสั่งคำสั่ง

โปรดทราบว่าไฟล์ส่วนตัว / สาธารณะที่เป็นของหนึ่งคีย์นั้นมีลายนิ้วมือเหมือนกันดังนั้นคุณจะเห็นข้อมูลซ้ำกัน


0

Google Compute Engine แสดงลายนิ้วมือคีย์โฮสต์ SSH ในเอาต์พุตอนุกรมของอินสแตนซ์ Linux API สามารถรับข้อมูลนั้นจาก GCE และไม่จำเป็นต้องลงชื่อเข้าใช้อินสแตนซ์

ฉันไม่พบที่อื่น แต่จากอนุกรมเอาต์พุต ฉันคิดว่าลายนิ้วมือควรอยู่ในสถานที่ที่เป็นมิตรกับโปรแกรมเมอร์มากขึ้น

อย่างไรก็ตามดูเหมือนว่ามันจะขึ้นอยู่กับประเภทของอินสแตนซ์ ฉันกำลังใช้อินสแตนซ์ของ Debian 7 (Wheezy) f1-micro


-1

ในการตรวจสอบเซิร์ฟเวอร์ SSH ระยะไกลก่อนการเชื่อมต่อครั้งแรกคุณสามารถดูได้ที่www.server-stats.net/ssh/เพื่อดูคีย์ SHH ทั้งหมดสำหรับเซิร์ฟเวอร์รวมถึงจากเมื่อทราบว่าเป็นคีย์

ไม่เหมือนใบรับรอง SSL แต่เป็นสิ่งที่ต้องทำก่อนที่จะเชื่อมต่อกับเซิร์ฟเวอร์ SSH เป็นครั้งแรก


4
ผู้ใช้ไม่ได้มองหาเว็บไซต์บุคคลที่สาม แต่เป็นบรรทัดคำสั่งจากระบบปฏิบัติการเอง
Andrew Barber เมื่อ

ดังนั้นโดยพื้นฐานแล้วปลั๊กอินคอนเวอร์เจนซ์ยกเว้น SSH แทนที่จะเป็น SSL และมีทนายความเพียงหนึ่งคน (ค่อนข้างแน่นอน) เสียงนั้นใช่มั้ย
คู่ปรับ Shot

-1

ใน Fedora ฉันทำ [ค้นหา ~ / .ssh] ซึ่งบอกฉันว่าปุ่มคือ @

/root/.ssh
/root/.ssh/authorized_keys

OP ดูเหมือนจะรู้ว่าจะหากุญแจได้จากที่ใด (ไม่ใช่~/.ssh/id*.pub) และต้องการรับลายนิ้วมือ
Gert van den Berg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.