ระบบที่ดีที่สุดสำหรับการจัดการคีย์ ssh? [ปิด]


42

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

ตัวเลือกที่ 1: กุญแจสาธารณะสาธารณะ / ส่วนตัวทั่วโลกหนึ่ง

ฉันจะสร้างพับลิกคีย์สาธารณะ / ไพรเวตหนึ่งคีย์และวางไพรเวตคีย์บนเครื่องไคลเอ็นต์ทุกเครื่องและพับลิกคีย์บนเครื่องเซิร์ฟเวอร์ทุกเครื่อง

ตัวเลือก 2: หนึ่งคู่คีย์ต่อเครื่องเซิร์ฟเวอร์

ฉันจะสร้าง keypair หนึ่งอันบนเครื่องเซิร์ฟเวอร์แต่ละเครื่องและวางกุญแจส่วนตัวแต่ละอันบนเครื่องลูกข่ายของฉัน

ตัวเลือก 3: หนึ่งคู่คีย์ต่อเครื่องไคลเอนต์

เครื่องไคลเอนต์แต่ละเครื่องจะมีคีย์ส่วนตัวที่ไม่ซ้ำกันและเครื่องเซิร์ฟเวอร์แต่ละเครื่องจะมีพับลิกคีย์สำหรับเครื่องไคลเอ็นต์ทุกเครื่องที่ฉันต้องการเชื่อมต่อ

ตัวเลือก 4: หนึ่งคู่คีย์ต่อลูกค้า / คู่เซิร์ฟเวอร์

ลงน้ำทั้งหมดหรือไม่

ข้อใดดีที่สุด มีตัวเลือกอื่น ๆ อีกไหม? คุณใช้เกณฑ์อะไรในการประเมินการกำหนดค่าที่เหมาะสม

คำตอบ:


33

ฉันใช้ตัวเลือกที่ 3: หนึ่งคู่คีย์ต่อเครื่องไคลเอนต์และมันสมเหตุสมผลที่สุดสำหรับฉัน นี่คือเหตุผลบางส่วน:

  • หากลูกค้าถูกบุกรุกคีย์นั้น (และเฉพาะคีย์นั้น) จะต้องถูกลบออกจากเซิร์ฟเวอร์
  • มีความยืดหยุ่นเพียงพอที่จะตัดสินใจเลือกสิ่งที่ฉันสามารถเข้าถึงได้จากที่ใดโดยไม่ให้สิทธิ์การเข้าถึงแบบครอบคลุมกับเซิร์ฟเวอร์ทั้งหมดจากลูกค้าทั้งหมด
  • สะดวกมาก. มีเพียง 1 คีย์สำหรับ ssh-add ไม่มีความสับสน
  • ติดตั้งง่ายและจัดการผ่านตัวเลือก 4

ตัวเลือก 4ดี แต่ทำงานได้มากเกินไป ตัวเลือกที่ 3ทำให้คุณ 98% อยู่ที่นั่นด้วยความยุ่งยากที่น้อยลง


4
ฉันไม่เห็นจุดตัวเลือก 4 มันไม่ได้มีจุดประสงค์อะไรเลย
niXar

26

ฉันใช้โซลูชันที่ซับซ้อนกว่าเล็กน้อย แต่หลากหลายมากเพราะฉันต้องการรักษาการแยกบางอย่างในรหัสประจำตัว SSH ที่ใช้สำหรับเซิร์ฟเวอร์เครือข่ายในบ้านเซิร์ฟเวอร์สำนักงานเซิร์ฟเวอร์ที่ปรึกษาเซิร์ฟเวอร์เครือข่ายไคลเอนต์และระบบอื่น ๆ ที่ฉันมีบัญชีอยู่

ตอนนี้กล่าวว่าฉันทำงานจากเวิร์กสเตชัน Linux เกือบพิเศษดังนั้นฉันจึงมีคีย์ USB ที่ติดตั้งโดยใช้การเข้ารหัส LUKS และตัวจัดการหน้าต่าง X11 ของฉันพร้อมกับ HAL daemon ตรวจจับไดรฟ์เข้ารหัส LUKS และพร้อมท์สำหรับวลีรหัสผ่านถอดรหัสเมื่อใส่และพยายาม ติดตั้ง ด้วยการเก็บสิ่งนี้ไว้ในไดรฟ์ที่เข้ารหัสฉันจะไม่เก็บกุญแจ SSH ไว้ในเวิร์กสเตชันใด ๆ

ฉันมีการกำหนดค่าต่อไปนี้ใน~/.ssh/configไฟล์ของฉัน:

Host *
    Protocol 2
    IdentityFile %d/.ssh/keys.d/id_rsa.%l
    IdentityFile %d/.ssh/keys.d/id_dsa.%l
    IdentityFile %d/.ssh/keys.d/%u@%l

% dจะแปลให้เป็นบ้านของผู้ใช้โดย OpenSSH และใน.ssh ~ /ไดเรกทอรีฉันได้สร้างkeys.dเป็น symlink ไปเส้นทางไดเรกทอรีบนไดรฟ์ USB เข้ารหัสเมื่อมีการติดตั้งอย่างถูกต้อง

l%การแสดงออกจะแปลให้เป็นเครื่องไคลเอนต์ท้องถิ่นชื่อโฮสต์และu%จะได้รับการแปลเป็นชื่อผู้ใช้ของลูกค้าในท้องถิ่น

การกำหนดค่านี้อนุญาตให้ SSH ค้นหาคีย์โดยใช้ 3 นิพจน์ที่ต่างกัน ตัวอย่างเช่นหากชื่อผู้ใช้jdoeของลูกค้าในพื้นที่ของฉันคือและชื่อเครื่องลูกค้าในพื้นที่ของฉันexamplehostมันจะดูในลำดับต่อไปจนกว่าจะพบกุญแจที่มีอยู่ทั้งสองและได้รับการยอมรับจากเซิร์ฟเวอร์ระยะไกล

/home/jdoe/.ssh/keys.d/id_rsa.examplehost
/home/jdoe/.ssh/keys.d/id_dsa.examplehost
/home/jdoe/.ssh/keys.d/jdoe@examplehost

คุณยังสามารถใช้% Rแสดงออกที่จะมองหาเฉพาะที่สำคัญสำหรับชื่อผู้ใช้เซิร์ฟเวอร์ระยะไกลหรือ% hสำหรับชื่อโฮสต์เซิร์ฟเวอร์ระยะไกลเช่นเดียวกับu%และl%ถูกนำมาใช้

อัปเดต: ตอนนี้ฉันใช้ GnuPG gpg-agent เข้ากันได้กับ ssh-agent จริง ๆ เพื่ออ่านและใช้คีย์การตรวจสอบสิทธิ์จากสมาร์ทการ์ด OpenPGP v2 ของฉัน


ว้าวทางออกที่ดีขอบคุณ! ฉันชอบการตั้งค่าสากลใน ~ / .ssh / config
slacy

มันพิสูจน์แล้วว่าสะดวกในการแยกสิ่งต่าง ๆ สำหรับการทำงานส่วนตัวและที่ปรึกษาเซิร์ฟเวอร์เครือข่ายไคลเอนต์ ... ฉันไม่ต้องการผสมผสานการพิสูจน์ตัวตนระหว่างพวกเขา แต่ต้องการให้มันง่ายสำหรับฉัน
Jeremy Bouse

! ที่น่าตื่นตาตื่นใจ ฉันรักอันนี้จริงๆ
balu

ฉันถือว่าคุณกำลังใช้ปุ่ม USB ที่แตกต่างกันสำหรับเครื่องไคลเอนต์ที่แตกต่างกัน มิฉะนั้นจุดในคีย์แยกกันคืออะไรหากเก็บทั้งหมดไว้ในที่เดียวกัน ในกรณีที่มีการละเมิดคุณจะต้องเพิกถอนทั้งหมด เว้นแต่ (และอาจ) ฉันหายไปบางสิ่งบางอย่างนี้ดูเหมือนจะซับซ้อน
Halil Özgür

@ HalilÖzgürใช่ฉันให้คำปรึกษาและไม่ต้องการใช้รหัสเดิมเสมอไป เนื่องจากคีย์ USB ได้รับการเข้ารหัสและไม่ได้เชื่อมต่อกับคอมพิวเตอร์ใด ๆ เว้นแต่ว่าฉันต้องการทำการเชื่อมต่อจึงไม่ต้องกังวลว่าเซิร์ฟเวอร์จะถูกละเมิดและวลีรหัสผ่านเพื่อถอดรหัสระบบไฟล์ของไดรฟ์นั้นมีความยาวเพียงพอที่จะทำให้ปุ่มเพิกถอนง่ายพอ
Jeremy Bouse

6

ฉันจะกำจัดทั้งตัวเลือกของคุณ 1s (ซึ่งฉันสงสัยว่าควรจะเป็นตัวเลือกที่ 2 ;-) เพราะคีย์ส่วนตัวเป็นข้อมูลที่ละเอียดอ่อน โดยส่วนตัวฉันจะไม่คัดลอกคีย์ส่วนตัวจากคอมพิวเตอร์เครื่องหนึ่งไปยังอีกเครื่องหนึ่ง (หรือแม้กระทั่งจากไฟล์หนึ่งไปยังอีกเครื่องบนคอมพิวเตอร์เครื่องเดียวกัน) ยกเว้นในกรณีที่ทำการสำรองข้อมูล แม้ว่าจะไม่เหมือนกับคีย์เข้ารหัสส่วนใหญ่หากคีย์ SSH สูญหาย แต่ไม่ใช่จุดสิ้นสุดของโลก (เพียงแค่สร้างขึ้นใหม่คุณจะไม่สูญเสียข้อมูลใด ๆ )


ใช่เปลี่ยนชื่อเป็น "ตัวเลือก 2" ที่เหมาะสมฉันชอบกฎของ "ไม่ต้องคัดลอกคีย์ส่วนตัว" นั่นเป็นกฎที่ดี
slacy

1

ตัวเลือก 3 และใช้บางอย่างเช่น Puppet เพื่อจัดการการจัดการคีย์


นี่คือreductivelabs.com/trac/puppet/wiki/Puppetการแนะนำลิงก์ไปยัง Puppet หรือไม่
Andy

ใช่แค่นั้นแหละ อย่าลืมดูตัวอย่างบางส่วนในเว็บไซต์ ช่วยให้เห็นสิ่งที่คนอื่นทำไปแล้ว - ไม่จำเป็นต้องบูรณาการล้อ
diq

1

ตัวเลือก 3

นอกจากนี้ยังช่วยให้คุณสามารถควบคุมเซิร์ฟเวอร์ที่ไคลเอ็นต์สามารถเข้าถึงได้ เช่นหากลูกค้า X ต้องการเข้าถึงเซิร์ฟเวอร์ A และ B แต่ C หรือ D คุณคัดลอกกุญแจสาธารณะไปยังโฮสต์เหล่านั้นเท่านั้น

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