จะเก็บคีย์ SSH ได้อย่างไร


66

ฉันเริ่มใช้คีย์ SSH แทนรหัสผ่านเมื่อเร็ว ๆ นี้ (ขอบคุณ GitHub แน่นอน) ดังนั้นโปรดจำไว้ว่าฉันค่อนข้างใหม่สำหรับแนวคิดทั้งหมดนี้ ปัจจุบันกุญแจของฉันอยู่ภายใต้ ~ / .ssh แต่ฉันไม่แน่ใจว่านี่เป็นการปฏิบัติที่ดีหรือไม่ เช่นถ้าฉันมีหลายเครื่องฉันต้องทำซ้ำกุญแจส่วนตัวของฉันซึ่งฉันคิดว่าไม่เป็นที่ต้องการ หรือถ้า HDD ของฉันไปที่ kaput ฉันก็จะสูญเสียกุญแจเหล่านั้นซึ่ง (ฉันเดา) ก็เป็นสิ่งที่ไม่พึงประสงค์เช่นกัน

ดังนั้นวิธีปฏิบัติที่ดีที่สุดในการจัดเก็บคีย์ SSH อย่างปลอดภัยสะดวกและเชื่อถือได้คืออะไร

ดูเหมือนว่าการใช้สมาร์ทการ์ดเป็นตัวเลือก (ดูสมาร์ทการ์ดสำหรับการจัดเก็บคีย์ gpg / ssh (Linux) - ฉันต้องมีอะไรบ้าง ) นี่เป็นสิ่งที่ดีที่สุดหรือไม่

อัปเดต: สาเหตุของคำถามคือบริการต่าง ๆ (เช่น GitHub, AWS EC2) ให้คำแนะนำเกี่ยวกับวิธีการตั้งค่าคีย์ SSH สำหรับการใช้บริการ แต่พื้นหลังไม่มากถึงไม่มีเลย (เช่นจะทำอย่างไรถ้าคุณมีคีย์ที่สร้างขึ้นแล้ว โดยssh-keygen[1] มาตรการรักษาความปลอดภัยที่แนะนำคืออะไร) และมันไม่ชัดเจนว่าข้อมูลนั้นไม่สำคัญหรือคุณคาดว่าจะรู้ว่า 'เป็นค่าเริ่มต้น'

ในการสรุปคำตอบจนถึงจุดนี้ (แต่โปรดอ่านพวกเขาและถ้าคุณมีสิ่งที่จะเพิ่ม - โปรดทำ): ดูเหมือนว่าในกรณีนี้มันจะดีถ้าคุณเพิ่งปล่อยกุญแจส่วนตัวของคุณใน ~ / .ssh ตราบใดที่คุณ กันพวกเขาจากคนอื่น แต่ตรวจสอบให้แน่ใจว่าคุณมีวิธีอื่นในการเข้าถึงบริการเพื่ออัปโหลดหรือสร้างรหัสใหม่หากคุณทำหายหนึ่งอัน (ซึ่งเป็นกรณีปกติ)

[1] GitHub ใช้ในการให้ความช่วยเหลือเกี่ยวกับวิธีการจัดการหลายคีย์


ดูเหมือนว่าลิงก์จะใช้งานไม่ได้help.github.com/multiple-ssh-keys
KJ ราคา

@KJ Price ขอบคุณที่เครื่อง Waybackของ Internet Archive หน้านี้ยังคงมีให้ออนไลน์แม้ว่าจะไม่ได้อยู่ที่ลิงค์ดั้งเดิม สำเนาหน้าเก็บไว้ใน 2 กันยายน 2011 สามารถพบได้ที่คีย์ SSH หลาย
moonpoint

คำตอบ:


41

เช่นถ้าฉันมีหลายเครื่องฉันจำเป็นต้องทำซ้ำคีย์ส่วนตัวซึ่งฉันคิดว่าไม่เป็นที่ต้องการ

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

นอกจากนี้ถ้า HDD ของฉันหายไปฉันจะทำคีย์ส่วนตัวของฉันหายซึ่ง (ฉันเดา) ก็ไม่เป็นที่ต้องการเช่นกัน

ไม่ได้จริงๆ หากคุณทำรหัสส่วนตัวหายให้สร้างรหัสใหม่และอัปโหลดรหัสสาธารณะที่เกี่ยวข้อง

สำหรับสิ่งที่คุ้มค่าคุณคิดถูกว่าการทำซ้ำคีย์ส่วนตัวนั้นไม่เป็นที่ต้องการอย่างมาก ตามหลักการแล้วควรสร้างรหัสส่วนตัวในไฟล์เดียว ( ~/.ssh/id_rsaตัวอย่าง) และไม่ควรปล่อยให้ไฟล์นั้น - นั่นคือไม่ควรคัดลอกย้ายและโดยเฉพาะอย่างยิ่งไม่ได้ถ่ายโอนผ่านเครือข่าย (เช่นฉันแยกพวกเขาออกจากการสำรองข้อมูล) เนื่องจากธรรมชาติของโปรโตคอลการพิสูจน์ตัวตนแบบไม่สมมาตรคุณเพียงแค่ต้องกังวลเกี่ยวกับการทำให้คีย์ส่วนตัวของคุณไม่อยู่ในมือของผู้อื่น ถ้าคุณไปลงน้ำเล็กน้อยและคุณสูญเสียการติดตามด้วยตัวคุณเองมันก็ไม่ใช่เรื่องใหญ่ (สิ่งนี้ไม่ควรสับสนกับคีย์ส่วนตัวของการเข้ารหัสแบบอสมมาตรเช่นปุ่ม GPG ซึ่งคุณอาจต้องการใช้)


14
ใช้งานได้เฉพาะในกรณีที่คุณมีวิธีอื่นในการเข้าถึงเซิร์ฟเวอร์ที่คีย์ส่วนตัวให้การเข้าถึง คุณสามารถอัปโหลดกุญแจสาธารณะใหม่ได้เฉพาะเมื่อคุณมีการเข้าถึงข้อมูลสำรองนั้น
TREE

2
@ ต้นไม้: ใช่ แต่จากประสบการณ์ของฉันมันหายากมากที่หาเซิร์ฟเวอร์ที่ไม่มีวิธีการอื่นในการเข้าถึง (หรืออย่างน้อยก็ต้องเพิ่มกุญแจสาธารณะเพิ่มเติมโดยไม่ต้องผ่าน SSH)
David Z

3
ขอบคุณที่ล้างสิ่งต่าง ๆ ให้มากขึ้น จริงๆแล้วการสูญเสียคีย์ SSH ส่วนตัวดูเหมือนจะไม่เป็นปัญหาเนื่องจากบริการทั้งหมดที่ฉันใช้อยู่ดูเหมือนจะเป็นอีกวิธีหนึ่งในการเข้าถึงบริการเพื่ออัปโหลดใหม่
Anton Strogonoff

3
AWS ไม่ให้การเข้าถึงรูปแบบอื่นใดนอกเหนือจากรหัสส่วนตัว คุณต้องตัดการเชื่อมต่อไดรฟ์และเล่นกับมันเพื่อเข้าถึงเมื่อคุณทำรหัสส่วนตัวหาย
ซาด Saeeduddin

1
โปรดทราบว่าคุณสามารถใส่รหัสผ่านในคีย์ส่วนตัวของคุณหากคุณต้องการความปลอดภัยอีกชั้น
sudo

8

ฉันจะเพิ่มว่า ~ / .ssh / สามารถอ่านได้โดยเบราว์เซอร์ของคุณหากคุณใช้บัญชีผู้ใช้เดียวกันเพื่อเรียกใช้ทั้งสอง

ลองมัน! ชี้เบราว์เซอร์ของคุณไปที่คีย์ส่วนตัวในโฮมไดเร็กตอรี่ของคุณ มันสนุก.

ดังนั้นฉันขอแนะนำให้เก็บ ssh-keys ในโฮมไดเรกทอรีของบัญชีผู้ใช้อื่น

คำบนคีย์ป้องกันข้อความรหัสผ่าน

  • วันนี้การถอดรหัสรหัสผ่านที่ไม่ใช่แบบสุ่มนั้นเร็วมาก ตรวจสอบแมวแฮช
    • (แม้ว่ารหัสผ่านแบบสุ่มและแบบยาว 12+ รหัสผ่านยังคงใช้เวลานานพอสมควรในการใช้กำลังดุร้าย)
    • ดังนั้นคีย์ ssh ที่เข้ารหัส AES จะไม่สามารถติดตามได้ในอนาคตอันใกล้ตราบใดที่คุณใช้ข้อความรหัสผ่านที่ดี ดูคำแนะนำ GitHub
  • ดังนั้นเว็บไซต์บางแห่งสามารถคาดเดาคีย์ของคุณโดยไม่มี JavaScript และจากนั้นเดรัจฉานบังคับคีย์ที่ออฟไลน์
  • และเบราว์เซอร์สามารถดูคลิปบอร์ดของคุณด้วย JS ด้วย ดังนั้นการคัดลอกข้อความรหัสผ่านที่ยาวมาก ๆ จึงทำให้คุณเสี่ยงต่อการถูกโจมตีด้วยจาวาสคริปต์ที่ซับซ้อนยิ่งขึ้น

look_at_keys.html

 9 <HTML>
10 <HEAD>
11 <TITLE>look at keys</TITLE>
12 </HEAD>
13 <FRAMESET cols="20%, 80%">
14   <FRAMESET rows="100, 200">
15       <FRAME src="/Users/yourname/.ssh/stuff.pem">
16       <FRAME src="blah.html">
17   </FRAMESET>
18   <FRAME src="contents_of_frame3.html">
19 </FRAMESET>
20 </HTML>

16
เพื่อความชัดเจนเพียงเพราะเบราว์เซอร์สามารถอ่านรหัสส่วนตัวของคุณที่ไม่ได้หมายความว่าเว็บไซต์ที่ทำงานในเบราว์เซอร์สามารถทำได้
Ajedi32

6
แต่ถ้าคุณฉีดกระบวนการในกระบวนการของเบราว์เซอร์ จากนั้นคุณสามารถควบคุมเบราว์เซอร์ได้เช่นกัน ดังนั้นข้อโต้แย้งนี้จึงสมบูรณ์
BigSack

แต่คุณต้องแฮ็คกระบวนการที่แทรกกระบวนการลงทะเบียนกระบวนการของเบราว์เซอร์ของหน่วยประมวลผล
Skid Kadda

8

มีเครื่องมือที่ดีมากชื่อ KeePass2 ( http://keepass.info/ ) พร้อมส่วนขยาย ( http://lechnology.com/software/keeagent/ )

คุณสามารถจัดเก็บรหัสผ่านคีย์ SSH และอื่น ๆ อีกมากมาย (ในหน้าอย่างเป็นทางการของ KeePass มีส่วนขยายที่มีประโยชน์มากกว่า)
หากคุณต้องการเข้าสู่ระบบโดยอัตโนมัติด้วยคีย์ SSH ของคุณคุณเพียงแค่ติดตั้ง PuTTY, Pageant และ KeePass ด้วย KeeAgent หากคุณกำหนดค่าอย่างถูกต้องคุณไม่จำเป็นต้องตั้งค่าคีย์ใน PuTTY, Pageant หรือ FileZilla

ฉันใช้มันด้วยตัวเองและฉันก็มีความสุขมาก ฉันมีมากกว่า 30 VPS และรูทเซิร์ฟเวอร์ที่มีจำนวนคีย์ SSH ที่แตกต่างกันและสิ่งเดียวที่ฉันต้องทำคือเปิด KeePass (ไม่ใช่รหัสผ่านหลักที่ปลอดภัยของฉัน) จากนั้นฉันก็ต้องพิมพ์ในคอนโซลข้อความรหัสผ่านของฉัน


3

ฉันอยากจะแนะนำให้เก็บกุญแจส่วนตัว:

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

ฉันจะบอกว่าสถานที่ที่ดีที่สุดคือ:

  • ฮาร์ดไดรฟ์ภายนอก
  • ปุ่มแฟลช
  • คอมพิวเตอร์ไม่ได้ต่ออินเทอร์เน็ต

ยิ่งไปกว่านั้นเพียงแค่พิมพ์ออกมาและใส่ไว้ในตู้เซฟกันไฟ


4
ความปลอดภัย / แนวปฏิบัติที่ดีที่สุดทำงานควบคู่ไปกับการปฏิบัติจริง หากกลยุทธ์ความปลอดภัยขัดขวางความสามารถในการใช้ระบบมันจะถูกบายพาสโดยผู้ใช้มากกว่าผู้โจมตี
zaTricky

1

ฉันมีไฟล์ tar ซึ่งมีการตั้งค่าผู้ใช้ของฉัน (.bashrc, .ssh / และไฟล์ config อื่น ๆ ) ที่ฉันเก็บไว้ในที่ปลอดภัย เมื่อฉันได้รับบัญชีเชลล์ใหม่ทุกที่ฉันเปิดเครื่องรูดไฟล์ tar ลงไป

คุณควรวางกุญแจส่วนตัวของคุณบนเซิร์ฟเวอร์ที่คุณเชื่อถือมิฉะนั้นคุณควรสร้างรหัสส่วนตัวใหม่บนเซิร์ฟเวอร์สำหรับเซิร์ฟเวอร์นั้นและอนุญาตให้เข้าถึงสิ่งที่คุณต้องการให้เข้าถึงได้

โดยส่วนตัวแล้วฉันสบาย ๆ เพียงแค่คัดลอก. ssh / สิ่งต่าง ๆ รอบตัว (มันหมายความว่าโดยคีย์ ssh ปกติทำให้เข้าถึง ssh ได้ทันทีเนื่องจากมันอยู่ในไฟล์ authorized_keys แล้ว)


ฉันเดาว่าการเข้ารหัส ~ / .ssh แขวนอยู่บนแท่ง usb จะช่วยให้คุณประหยัดจากความต้องการในการสร้างและอัปโหลดคีย์ใหม่ในกรณีที่ฮาร์ดแวร์ล้มเหลว อย่างไรก็ตามเนื่องจากมีเซิร์ฟเวอร์น้อยมากที่ฉันใช้คีย์ SSH เพื่อเข้าถึง (และเครื่องที่ฉันเชื่อมต่อน้อยมาก) การสร้างคีย์ใหม่จะไม่ทำให้เกิดค่าใช้จ่ายมากนัก
Anton Strogonoff

2
มันเป็นม้าสำหรับหลักสูตรและขึ้นอยู่กับสาเหตุที่คุณใช้กุญแจ ฉันไม่เห็นปัญหาในการคัดลอกคีย์ส่วนตัว ssh ไปยังลิงค์ SSH ที่เข้ารหัสแล้ว แต่ถ้าคุณไม่ไว้วางใจเครื่องเป้าหมายและไม่รู้ว่าใครมีสิทธิ์เข้าถึงรูทคุณไม่ควรใส่อะไรลงไปในเซิร์ฟเวอร์ที่คุณไม่สามารถเสียได้
EightBitTony

คุณไม่ต้องการให้รหัสส่วนตัวของคุณบนเซิร์ฟเวอร์ของคนอื่น ทุกคนที่มีสิทธิ์เข้าถึงรูทบนเซิร์ฟเวอร์นั้นสามารถอ่านไพรเวตคีย์ของคุณจากนั้นพวกเขาสามารถเลียนแบบคุณในระบบที่คุณเข้าถึงด้วยไพรเวตคีย์นั้น คุณควรใส่กุญแจสาธารณะของคุณเพื่อเข้าถึงเซิร์ฟเวอร์เท่านั้น และอย่าคิดว่าวลีรหัสผ่านจะช่วยได้มากหากคุณใช้มันในเครื่องระยะไกลเพื่อถอดรหัสคีย์ส่วนตัว
Codeguy007

คุณสามารถส่งต่อ ssh-agent ผ่าน ssh ด้วยวิธีนี้คุณไม่จำเป็นต้องจัดเก็บคีย์ส่วนตัวบนเซิร์ฟเวอร์หรือส่งข้อความรหัสผ่านของคุณผ่านเน็ต stackoverflow.com/questions/12257968/…
Codeguy007

1

คุณสามารถจัดเก็บคีย์ ssh ของคุณในไดเรกทอรีแยกต่างหากภายในพาร์ติชันที่เข้ารหัส จากนั้นคุณสามารถใช้ ssh ชี้ไปยังไดเรกทอรีนั้นด้วย-i:

ssh -i identity_file me@example.com

คำอธิบายแบบเต็ม ( man ssh):

-i identity_file

เลือกไฟล์ที่จะอ่านตัวตน (ไพรเวตคีย์) สำหรับการพิสูจน์ตัวตนคีย์สาธารณะ ค่าเริ่มต้นคือ ~ / .ssh / identity สำหรับโปรโตคอลรุ่น 1 และ ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 และ ~ / .ssh / id_rsa สำหรับรุ่นโปรโตคอล 2 จะถูกระบุตามแบบโฮสต์ต่อในไฟล์การกำหนดค่า
เป็นไปได้ที่จะมีตัวเลือก -i หลายตัว (และตัวระบุหลายตัวที่ระบุในไฟล์กำหนดค่า) หากไม่มีการระบุใบรับรองอย่างชัดเจนโดยคำสั่ง CertificateFile ssh จะพยายามโหลดข้อมูลใบรับรองจากชื่อไฟล์ที่ได้รับโดยการผนวก -cert.pub ไปยังชื่อไฟล์ประจำตัว

แนวทางการรักษาความปลอดภัยของฉันคือฉันแบ่งข้อมูลออกเป็นส่วนตัวและทั่วไป ฉันไม่ต้องการเข้ารหัสลับพาร์ติชันทั้งหมดของฉันนั่นเป็นเหตุผลที่ฉันคัดลอกไฟล์ลับ (เช่นที่อยู่ใน~/.ssh) ลงในพาร์ติชันที่เข้ารหัส

ฉันคิดว่านี่ให้ความปลอดภัยค่อนข้างมีประสิทธิภาพเพราะมัลแวร์จะไม่พบสิ่งใดใน ~ / .ssh และอาจไม่สแกนโปรไฟล์ทั้งหมดของระบบหรือเชลล์เพื่อค้นหาตำแหน่งนั้น

-F configfile 

กำหนดเส้นทางไปยังไฟล์กำหนดค่า

ป.ล. ฉันจะสร้างนามแฝงalias ssh='ssh -i ... -F ...'และใส่ไว้ในโปรไฟล์ของคุณ

PPS ฉันยังไม่ได้ตรวจสอบสิ่งนี้และฉันไม่รู้ว่าโปรแกรมอื่น ๆ (เช่น git) จะทำงานกับการตั้งค่า ssh เหล่านี้ได้อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.