การใช้คีย์ส่วนตัว SSH เดียวกันข้ามหลายเครื่อง


23

ฉันมี repo Github ฉันต้องการเข้าถึงจากเครื่อง Linux สองเครื่องที่แตกต่างกัน

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

สำหรับไคลเอนต์ที่สองฉันคัดลอก/home/{user}/.ssh/id_rsaไฟล์จากไคลเอนต์แรก ฉันคิดว่านี่อาจเป็นสิ่งที่ฉันต้องทำ แต่เมื่อฉันพยายามเชื่อมต่อฉันจะได้รับ 'การอนุญาตถูกปฏิเสธ (publickey)'

ฉันพลาดอะไรไป

คำตอบ:


32

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

SSH เป็นเรื่องพิถีพิถันมากเกี่ยวกับการอนุญาตของไฟล์ดังนั้นฉันจะตรวจสอบการอนุญาต/home/{user}ทั้งหมดจากทางลงสู่id_rsaไฟล์

SSH ไม่สนใจสิทธิ์ในการเขียนกลุ่มหรือโลกดังนั้นโปรดตรวจสอบให้แน่ใจว่าคุณchmod go-wโฮมไดเรกทอรีของคุณและ~/.sshไดเรกทอรีสำหรับการเริ่ม chown ${USER}:${USER}ฉันยังต้องการให้แน่ใจว่าพวกเขากำลังเป็นเจ้าของโดยผู้ใช้ของคุณ

สำหรับคีย์ SSH นั้นฉันเองchmod 600...

หากคุณต้องการฉันมีข้อมูลเพิ่มเติมเกี่ยวกับวิธีจัดการคีย์ SSH ของฉันในคำตอบของคำถาม SSH อื่น


3
มันเป็นสิทธิ์ - อย่ามีตัวแทน
โหวต

6

หากคุณได้รับอนุญาตถูกปฏิเสธจากปลาย Github อาจเป็นได้ว่าไม่ได้รับไฟล์คีย์ SSH ที่คัดลอกมา แต่เป็นค่าเริ่มต้นของระบบ วิธีง่ายๆในการทำเช่นนี้คือการสร้าง~/.ssh/configไฟล์ที่ยอดเยี่ยมและนำสิ่งต่อไปนี้มาใช้:

Host github.com
  Hostname      github.com
  User          git
  IdentityFile  ~/.ssh/yourkeyfile

นี่จะเป็นการบังคับให้ไคลเอ็นต์ SSH ของคุณใช้คีย์นั้นสำหรับ github.com เท่านั้น

หวังว่านี่จะช่วยได้


2
อย่ามีตัวแทน upvote แต่ต้องขอบคุณ
Yarin

1

ฉันรู้ว่านี่เก่า แต่คิดว่าฉันจะชี้ให้เห็นว่าคุณต้องคัดลอกกุญแจสาธารณะไปยังลูกค้ารายที่สองด้วย

(หรือคำนวณใหม่ด้วย ssh-keygen -y -f ~ / .ssh / id_rsa_ .. > ~ / .ssh / id_rsa ... pub)

จาก [1]:

  1. วิธีการตรวจสอบคีย์สาธารณะ: "publickey"

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

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

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

[1] [ http://www.openssh.org/txt/rfc4252.txt เหมือนพี่น้อง 1]


0

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


ฉันวางแผนที่จะทำ 1 keypair ต่อผู้ใช้ในไคลเอนต์ mutliple ของผู้ใช้แต่ละคน แต่คีย์คู่สำหรับลูกค้าแต่ละรายของผู้ใช้แต่ละคนดูเหมือนว่าฉันจะออกไปจากมือ ... ?
Yarin

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