การใช้คีย์ SSH กับข้อความรหัสผ่านว่างเปล่าไม่เป็นไรหรือไม่?


34

เมื่อฉันเรียนรู้วิธีการสร้างคีย์ ssh ครั้งแรกบทเรียนที่ฉันอ่านทั้งหมดระบุว่าควรเลือกข้อความรหัสผ่านที่ดี แต่เมื่อเร็ว ๆ นี้เมื่อตั้งค่ากระบวนการ daemon ที่ต้องการ ssh ไปยังเครื่องอื่นฉันค้นพบว่าวิธีเดียว (ดูเหมือน) ที่จะมีกุญแจที่ฉันไม่ต้องการรับรองความถูกต้องในการบู๊ตทุกครั้งคือการสร้างรหัสที่ว่างเปล่า ข้อความรหัสผ่าน ดังนั้นคำถามของฉันคืออะไรเกี่ยวข้องกับการใช้คีย์ที่ไม่มีข้อความรหัสผ่าน?

คำตอบ:


38

คีย์ที่ไม่มีข้อความรหัสผ่านจะพึ่งพาคนอื่นไม่สามารถเข้าถึงคีย์นั้นได้ (ผู้ที่ไม่สามารถเข้าถึงทรัพยากรที่ให้การเข้าถึงต่อไป) ดังนั้นหากคีย์ให้สิทธิ์การเข้าถึงเครื่องที่อยู่ติดกันและเครื่องทั้งสองมีระดับความปลอดภัยทางอิเล็กทรอนิกส์และทางกายภาพในระดับเดียวกันมันก็ไม่ใช่เรื่องใหญ่อะไรเลย

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

ท้ายที่สุดความมั่นใจในการตั้งค่าของคุณและลดความเสี่ยง / ค่าใช้จ่ายในการดำเนินการ - หากคุณมั่นใจได้ว่าผู้โจมตีสามารถเข้าถึงกุญแจได้ง่ายกว่าการใช้ทรัพยากรมากกว่ากุญแจที่ให้คุณเข้าถึง แล้วคุณก็สบายดี หากคุณไม่มีความมั่นใจคุณควรแก้ไขสาเหตุที่ :)


มีเพียงคนที่เชื่อถือได้เท่านั้นที่จะสามารถเข้าถึงเครื่องได้โดยใช้กุญแจดังนั้นฉันเดาว่าจะตอบคำถามของฉันได้ ขอบคุณ
mozillalives

11

โซลูชันอื่นเพิ่มความปลอดภัยขณะที่ทำให้คุณง่ายขึ้นคุณจึงไม่ต้องพิมพ์รหัสผ่านตลอดเวลา:

ถ้าคุณต้องการเข้ารหัสคีย์ส่วนตัวของคุณคุณสามารถใช้ssh-agentบนเวิร์กสเตชันของคุณเพื่อ 'แคช' คีย์ที่ไม่เข้ารหัส เมื่อคุณต้องการจัดเก็บคีย์ถอดรหัสของคุณคุณจะเรียกใช้ssh-add ~/.ssh/id_rsaหรือชื่อคีย์ส่วนตัวของคุณ คุณจะได้รับพร้อมท์ให้ใส่รหัสผ่านและรหัสถอดรหัสจะพร้อมใช้งานสำหรับการเชื่อมต่อ ssh ของคุณจนกว่าคุณจะออกจากระบบฆ่าssh-agentหรือปิด

คุณสามารถkillเก็บกุญแจไว้กับssh-agent -kและคุณสามารถกำหนดอายุการใช้งานสำหรับกุญแจที่จะอยู่ในหน่วยความจำด้วยssh-agent -t [seconds]เช่น; หากคุณไม่ต้องการเก็บคีย์ของคุณไว้ตลอดไป แต่คุณต้องการทำอะไรมากมายรอบ ๆ โฮสต์คุณสามารถตั้งค่าการหมดเวลาได้ 5-10 นาที ดังนั้นคุณไม่จำเป็นต้องป้อนรหัสผ่านของคีย์อย่างต่อเนื่อง

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

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

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

โอ้ฉันลืมที่จะพูดถึง; ฉันเรียกใช้ssh-agentเมื่อฉันเริ่ม X ไม่เช่นนั้นคีย์ de-crypted ที่ฉันเก็บไว้ssh-addจะไม่ถูกเก็บไว้ในxtermเซสชันที่แตกต่างกันและฉันต้องป้อนรหัสผ่านใหม่ทุกครั้งที่ฉันปิดxtermi ที่เปิดตัวssh-addใน~/.xinitrcไฟล์ของฉันฉันมี:

if [ -x /usr/bin/ssh-agent ]; then
   eval $(/usr/bin/ssh-agent)
fi

ฉันได้รับการเรียกให้ssh-agentถูกรวมเข้าด้วยกันevalเพราะ ssh-agent คืนค่าตัวแปรสภาพแวดล้อมบางอย่างที่จำเป็นต้องตั้งค่าเมื่อมันทำงานและเรียกใช้จาก~/.xinitrcนั้นตัวแปรสภาพแวดล้อมจะคงที่ตลอดช่วง X


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

ดีถ้าคุณใช้ssh-agentและใช้ssh -A -i privkey user@hostมันจะช่วยให้การส่งต่อตัวแทน SSH ซึ่งจะช่วยให้คุณสามารถเข้าถึงเซิร์ฟเวอร์จากเซิร์ฟเวอร์เริ่มต้นโดยไม่ต้องวางคีย์ส่วนตัวของคุณบนเซิร์ฟเวอร์แรก ไม่แนะนำให้ใช้การผูกมัด ssh แม้จะไม่มีการเปิดใช้งานการส่งต่อคีย์ ssh และssh -Aมีข้อกังวลด้านความปลอดภัยของตัวเอง ไม่มีเหตุผลใดที่รหัสบนเซิร์ฟเวอร์ไม่สามารถเข้ารหัสได้ในขณะที่รหัสบนเวิร์กสเตชันของคุณไม่มีข้อความรหัสผ่าน
cpbills

3

คุณสามารถดูคำถามที่คล้ายกันที่ฉันถามเกี่ยวกับคีย์ส่วนตัว SSL สำหรับเว็บเซิร์ฟเวอร์ โดยทั่วไปมีสามตัวเลือก:

  1. ปกป้องคีย์ด้วย perms ของระบบไฟล์
  2. ใช้รหัสป้องกันด้วยรหัสผ่านและป้อนรหัสด้วยตนเองทุกครั้งที่รีสตาร์ท
  3. ใช้รหัสป้องกันด้วยรหัสผ่านและเก็บรหัสไว้ในระบบไฟล์เพื่อทำการรีสตาร์ทโดยอัตโนมัติ

แต่ละคนมีข้อบกพร่องดังนั้นทุกอย่างขึ้นอยู่กับสิ่งที่คุณกลัวที่สุด


1

สำหรับการเข้าถึงอัตโนมัติซึ่งตามที่คุณบอกว่าต้องใช้คีย์รหัสผ่านที่น้อยกว่าฉันมักจะใช้ตัวเลือกพิเศษของ authorized_keys (ดู sshd (8)) เพื่อ จำกัด คำสั่งที่สามารถรันได้

ฉันมักจะให้สคริปต์ที่เขียนอย่างละเอียดที่รีโมทระยะไกลซึ่งทำงาน (หรืองาน - มันสามารถดูพารามิเตอร์) ที่ฉันต้องการได้รับอนุญาต

จากนั้นฉันก็ล็อคมันลงไปยังที่อยู่ IP ที่สามารถเชื่อมต่อด้วยคีย์นั้น (ไม่สามารถป้องกันได้ 100% แต่ทำได้ดีกับข้อ จำกัด ของคำสั่งด้วย)


สุดยอดจุด - ถ้าคุณพบว่าจำเป็นต้องใช้กุญแจที่ไม่มีการป้องกันสิ่งที่ดีที่สุดที่คุณทำได้คือล็อคมันไว้!
MikeyB

1

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


0

หากคุณต้องการใช้ ssh เพื่อทำขั้นตอนอัตโนมัติใด ๆ - ฉันกำลังคิดถึงการตรวจสอบ Nagios โดยเฉพาะ - คุณอาจไม่ต้องการใช้ข้อความรหัสผ่าน

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

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

โดยพื้นฐานแล้วถ้าคุณไม่ทราบว่ามีเหตุผลที่ดีไม่ให้สร้างข้อความรหัสผ่าน การขี้เกียจพิมพ์รหัสผ่านของคุณทุกครั้งอาจเป็นเหตุผลที่ดีพอสำหรับคุณ :-)


แม้ว่าพวกเขาจะเข้าสู่ระบบจากเครือข่ายภายนอกสิ่งที่สร้างความแตกต่างได้อย่างไร เฉพาะเรื่องความปลอดภัยของคอมพิวเตอร์ไคลเอนต์เท่านั้นข้อความรหัสผ่านจะได้รับการจัดการที่ฝั่งไคลเอ็นต์ใช่ไหม
njsg

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

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