กุญแจสาธารณะ“ ส่ง” ไปยังเซิร์ฟเวอร์อย่างไรและไพรเวทคีย์“ ใช้” สำหรับ SSH อย่างไร


11

มีสองเครื่อง Linux, A และ B สคริปที่ทำงานอยู่บนความต้องการที่จะสามารถที่จะ SSH เข้าไปในบีเพื่อสร้างกุญแจสาธารณะ (อาจจะให้บริการssh-keygen-generated id_rsa.pub) แล้วใช้กุญแจส่วนตัวที่เกี่ยวข้อง (อีกครั้งอาจและid_rsa) เพื่อให้ การเชื่อมต่อ SSH นั้น

หากสิ่งที่ฉันได้กล่าวไว้ข้างต้นไม่ถูกต้องหรือเข้าใจผิดโปรดเริ่มต้นด้วยการแก้ไขฉัน!

สมมติว่าฉันเพิ่มหรือลดเป้าหมาย:

  • A“ ให้” B คีย์สาธารณะของมันid_rsa.pubอย่างไร( )? สิ่งนี้จะต้องเป็นกระบวนการที่ดำเนินการด้วยตนเองหรือเป็นไปโดยอัตโนมัติ? หากใช้เองจะมีกระบวนการอะไร หากอัตโนมัติคำสั่งคืออะไร เมื่อ B "รับ" กุญแจสาธารณะนี้จะไปหรือเก็บที่ไหน?
  • เมื่อเริ่มต้นการเชื่อมต่อ SSH ไปยัง B A "ใช้" ไพรเวตคีย์ ( id_rsa) เป็นส่วนหนึ่งของการเชื่อมต่อนั้นอย่างไร

3
ทำไม downvote ถึงได้อธิบาย? มันแสดงให้เห็นการวิจัยเป็นSSCCEและความรู้ของฉันไม่ได้ซ้ำกัน หากคุณไม่เห็นด้วยและคิดว่านี่เป็นสิ่งที่ซ้ำกันโปรดระบุลิงก์ไปยังคำถามที่คุณรู้สึกว่ามันซ้ำกัน!
user3178622

ในขณะที่ฉันไม่ได้ลงคะแนนและไม่คิดว่าคำถามนี้ไม่ดี แต่อย่างใดบางทีความปลอดภัยของข้อมูลอาจเป็นสถานที่ที่เหมาะสมกว่า
MC10

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

5
แนวคิดของ SSCCE นั้นไม่สามารถใช้ได้กับคำถามที่ไม่เกี่ยวกับรหัส
สกอตต์

2
ไม่ซ้ำกัน แต่ที่เกี่ยวข้อง: superuser.com/questions/383732/how-does-ssh-encryption-work อาจจะตอบส่วนที่สองของคำถาม (วิธีการคีย์ส่วนตัวจะใช้)
เจ

คำตอบ:


5

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

โดยค่าเริ่มต้น ssh จะใช้ไฟล์ ~ / .ssh / id_XXX เป็นคีย์ส่วนตัวของคุณ XXX สามารถเป็น rsa, dsa หรือโปรโตคอลใด ๆ ที่สร้างคีย์ IIRC, dsa เก่าและไม่ควรใช้ -iหากคุณต้องการที่จะใช้กุญแจส่วนตัวที่แตกต่างกันคุณสามารถระบุไว้ในคำสั่งของคุณโดยใช้ SSH ตราบใดที่รหัสส่วนตัวที่ใช้ตรงกับรหัสสาธารณะบนเครื่องระยะไกล (ในไฟล์ authorized_keys สำหรับบัญชีผู้ใช้ที่คุณกำลังเข้าสู่ระบบ) คุณจะไม่ต้องป้อนรหัสผ่าน


ขอบคุณ @BamaPookie - ผู้ติดตามสองสามคน: (1) เมื่อssh-keygenมีการวิ่งคุณพูดถึงว่าปุ่มสองปุ่ม "อยู่ในท้องถิ่นเท่านั้น" หรือไม่ ไหน?!? ในขณะที่ฉันสามารถนำทางไปยังโฟลเดอร์ใดและดูid_rsa.pubและid_rsa? (2) ฉันคิดว่าssh-addเป็นคำสั่งในการเพิ่มกุญแจสาธารณะauthorized_keysใช่ไหม? ความแตกต่างระหว่างssh-copy-idและssh-addคืออะไร? ขอบคุณอีกครั้ง!
user3178622

2
@ user3178622 อีกครั้ง '1' ฉันไม่มีมันอยู่ข้างหน้าฉัน แต่ดูเหมือนว่า~/.ssh/id_rsa '2', ssh-add ไม่ได้เพิ่มไว้ใน authorized_keys มันเป็นการเพิ่มพวงกุญแจ .. ฉันไม่ได้ใช้ ssh - เพิ่มว่า ssh-add จะทำอย่างไรกับการทำให้คุณไม่ต้องป้อนคีย์วลีทุกครั้งที่คุณใช้คีย์ที่ต้องใช้คีย์เฟส ดังนั้นหากคีย์ ssh ของคุณไม่จำเป็นต้องใช้วลีสำคัญดังนั้นฉันคิดว่าไม่มีเหตุผลที่จะใช้ ssh-add และฉันคิดว่าคุณยังคงต้องใช้ ssh-copy-id หรือทำการคัดลอกคีย์สาธารณะด้วยตนเอง authorized_keys
barlop

2
ssh-keygen จะถามคุณว่าจะบันทึกไฟล์ที่ไหน แต่ตำแหน่งเริ่มต้นอยู่ใน ~ / .ssh / ssh-copy-id คัดลอกกุญแจสาธารณะไปยังโฮสต์ระยะไกล ssh-add เพิ่มไพรเวตคีย์ให้กับโลคอลคีย์ของคุณ การเพิ่มไพรเวตคีย์ในโลคอลคีย์ของคุณหมายความว่ามันจะถูกตรวจสอบโดยค่าเริ่มต้นเมื่อพยายามเชื่อมต่อ ssh (นั่นคือโดยไม่ต้องระบุด้วย -i)
BamaPookie

1
@BamaPookie ตำแหน่งที่คุณเขียน "การเพิ่มคีย์ส่วนตัวในพวงกุญแจท้องถิ่นของคุณหมายความว่ามันจะถูกตรวจสอบโดยค่าเริ่มต้นเมื่อพยายามเชื่อมต่อ ssh (นั่นคือโดยไม่ต้องระบุด้วย -i)" <--- มันคุ้มที่จะชี้แจงว่า ฉันคิดว่าคุณหมายความว่ามันเปลี่ยนคีย์ส่วนตัวเริ่มต้นที่เลือกดังนั้นแทนที่จะเป็น id_rsa มันมาจากพวงกุญแจ (แน่นอนว่าหากไม่มี ssh-add คุณยังไม่จำเป็นต้องระบุรหัสส่วนตัวด้วย -i แต่จะยังคงมีค่าเริ่มต้นซึ่งเป็นค่าเริ่มต้นที่ต่างออกไป)
barlop

3

มีสองเครื่อง Linux, A และ B. สคริปต์ที่ทำงานบน A จำเป็นต้องสามารถ SSH เป็น B ดังนั้น A สร้างคีย์สาธารณะ อีกครั้งอาจเป็น id_rsa) เพื่อทำการเชื่อมต่อ SSH นั้น

หากสิ่งที่ฉันได้กล่าวไว้ข้างต้นไม่ถูกต้องหรือเข้าใจผิดโปรดเริ่มต้นด้วยการแก้ไขฉัน!

สมมติว่าฉันเพิ่มหรือลดเป้าหมาย:

ใช่

แต่ B ต้องการคีย์สาธารณะของ A เพื่อแสดงรายการในไฟล์ authorized_keys ของ B เพื่อให้ A สามารถเชื่อมต่อกับ B ได้

นอกจากนี้คุณยังสามารถลบ id_rsa.pub และ ssh ไปยัง B และมันจะยังใช้งานได้เพราะกุญแจสาธารณะถูกสร้างใหม่ด้วยการเชื่อมต่อ ssh แต่ละครั้งและไม่ได้เก็บไว้ใน id_rsa.pub ใด ๆ

A“ ให้” B รหัสสาธารณะของมันอย่างไร (id_rsa.pub) สิ่งนี้จะต้องเป็นกระบวนการที่ดำเนินการด้วยตนเองหรือเป็นไปโดยอัตโนมัติ? หากใช้เองจะมีกระบวนการอะไร หากอัตโนมัติคำสั่งคืออะไร

คู่มือ - สิ่งที่ต้องการ

จาก-

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

หรือเพิ่มเติมด้วยตนเองเพื่อทำลายคำสั่งลง

A $ cat id_rsa.pub | ssh user@host 'cat>~/a.a'

จากนั้นใน B ตรวจสอบให้แน่ใจว่า ~ / .ssh มีอยู่แล้วทำ cat a.a >> ~/.ssh/authorized_keys

และคุณสามารถ cat_user_keys ของ B ก่อนและหลังเพื่อให้แน่ใจว่ามีการระบุคีย์

หรือคุณสามารถส่งอีเมล id_rsa.pub ไปยังบัญชีอีเมลจากนั้น B, B สามารถตรวจสอบอีเมลและผนวกเนื้อหาของ id_rsa.pub ลงในไฟล์ authorized_keys ของเขา

อัตโนมัติ

คำสั่ง ssh-copy-id

คุณจะต้องสามารถ ssh ในดังนั้นคุณต้องเข้าถึงรหัสผ่าน

แทนที่จะทำ ssh user @ host คุณทำ ssh-copy-id user @ host และคุณได้รับพร้อมท์ให้ใส่รหัสผ่านคุณป้อนเข้าไปคุณจะเข้าไปคัดลอกกุญแจสาธารณะแทน และครั้งต่อไปที่คุณทำ ssh user @ host มันจะใช้กุญแจ

เมื่อ B "รับ" กุญแจสาธารณะนี้จะไปหรือเก็บที่ไหน?

B's ~ / .ssh / authorized_keys

เมื่อเริ่มต้นการเชื่อมต่อ SSH ไปยัง B A "ใช้" คีย์ส่วนตัว (id_rsa) เป็นส่วนหนึ่งของการเชื่อมต่อนั้นอย่างไร

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


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