Git และ SSH ใช้คีย์ใด


94

สมมติว่า.sshไดเรกทอรีของคุณมี 30 คีย์ (15 ส่วนตัวและ 15 สาธารณะ)

ที่ไหนใน Git สามารถตรวจสอบว่าอันไหนใช้เพื่อเชื่อมต่อกับที่เก็บระยะไกลที่กำหนด


10
ใครก็ตามที่โหวตให้ "ปิด" คำถามนี้ - เกี่ยวข้องโดยตรงกับการเขียนโปรแกรมด้วยเหตุผลเดียวกันคำถามเกี่ยวกับ GIT สามารถทำได้ที่นี่
James Raitsev

1
เนื้อหา ... นี่เป็นคำถามสำหรับผู้ใช้ขั้นสูงจริงๆปัญหาที่นี่ไม่ใช่คอมไพล์ แต่เป็นแพลตฟอร์มที่ทำงานอยู่ คุณไม่สามารถตรวจสอบ "ในคอมไพล์" สำหรับปัญหาได้เนื่องจาก git ไม่สนใจมันเกี่ยวข้องกับวิธีที่คุณใช้ ssh และวิธีกำหนดค่าเท่านั้น คุณใช้ ssh-agent ระบบจัดการคีย์ประเภทใดใช้ระบบปฏิบัติการอะไรเวอร์ชันอะไร ฯลฯ
Arafangion

คำตอบ:


68

รายการต่อไปนี้ใน.ssh/configไฟล์ช่วยแก้ปัญหาได้

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever

~/.ssh/whateverเส้นทางไปยังคีย์ส่วนตัวของคุณอยู่ที่ไหน

นอกจากนี้ผู้ใช้และโฮสต์สามารถรับได้จาก

git push git@git.assembla.com:repo_name.git
         ^__ ^_______________
         user host

ดังนั้นถ้าฉันต้องการใช้คีย์ ssh อื่นสำหรับโฮสต์อื่นฉันจะทำซ้ำหลังจากครั้งแรกหรือไม่? Identityfile เกี่ยวข้องกับโฮสต์แรกก่อนหน้าหรือไม่
MikeSchem

ตกลงอือดูเหมือนว่าเป็นกรณีที่cyberciti.biz/faq/...
MikeSchem

68

การดำเนินการ ssh ในโหมด verbose หรือที่เรียกว่าssh -v user@hostจะพิมพ์ข้อมูลการดีบักจำนวนมากซึ่งมีรายละเอียดเกี่ยวกับไฟล์คีย์ที่พยายามเข้าสู่ระบบ

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

ตอนนี้ถ้าคุณรวมนี้มีขั้นตอนที่ 4 ในตัวเอง Git ของหน้า SSH ช่วยเหลือ , ssh -vT git@github.comสามารถให้คำตอบ

หมายเหตุ: คุณยังสามารถใช้-iสวิตช์เพื่อบอก ssh ในระหว่างการดำเนินการคำสั่งซึ่งจะใช้คีย์ไฟล์


ดูสิ่งนี้ด้วย: stackoverflow.com/questions/18845799/…
Sharadh

1
คุณยังสามารถ grep เอาต์พุตข้อผิดพลาดมาตรฐานของคำสั่ง ssh เพื่อค้นหาไฟล์คีย์เช่นนี้: ssh -vv user@host 2> >(grep Offering)- สิ่งนี้จะทำให้ง่ายขึ้น ไฟล์สุดท้ายควรเป็นคีย์สาธารณะ ตัวอย่าง:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
Gianfranco P.

3
githubgitไม่ได้เป็นสิ่งเดียวกับ
ForeverWintr

9

เว้นแต่จะระบุไว้ใน.ssh/configไฟล์จะใช้ไฟล์คีย์ส่วนตัวเริ่มต้น

ไฟล์ดีฟอลต์คือ~/.ssh/id_rsaหรือ~/.ssh/id_dsaหรือ~/.ssh/identityขึ้นอยู่กับเวอร์ชันโปรโตคอล


เมื่อคีย์ถูกเพิ่มไปยังโฮสต์ที่รู้จัก?
mountainLion

6

ฉันจะบอกว่าตรงกับรสนิยมของฉันมากที่สุดคือ:

GIT_SSH_COMMAND='ssh -v' git …

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

export GIT_SSH_COMMAND='ssh -v'
git …

- ตามที่man gitแนะนำมีตัวแปรสภาพแวดล้อมบางอย่างที่จะส่งผลต่อการดำเนินงานของ Git ด้วยการใช้ SSH ตามที่man sshคุณจะได้รับข้อมูลการดีบักเมื่อปรับใช้-vตัวเลือก (ไม่เพียง แต่ตรวจสอบคู่มือหากคุณต้องการข้อมูลเพิ่มเติม)

ใช้คีย์ไหน

ในผลลัพธ์คุณจะเห็น smth เช่น ...

debug1: Offering public key: …

…ซึ่งเป็นคำตอบสำหรับ qn ของคุณ


1
ใช่. นี่ควรเป็นคำตอบที่ได้รับการยอมรับ เพื่อให้ทำงานบน windows CMD (ugh) ให้ใช้: set GIT_SSH_COMMAND=ssh -v. สิ่งนี้ช่วยให้ฉันรู้ว่า ssh-config Inlcude-Path ควรเป็นแบบนี้บน windows: Include /C/Users/YourUserName.ssh/configเพื่อสร้าง ssh และ git ใช้ไฟล์ config ซึ่งใช้เป็นตัวอย่างHOST *รายการเพื่อระบุไฟล์ identity git / ssh ใช้
icyerasor

5

เนื่องจากgitใช้เพียงsshเชื่อมต่อจึงใช้คีย์ใดก็ได้ที่sshจะใช้เชื่อมต่อกับโฮสต์ระยะไกล ดู~/.ssh/configไฟล์สำหรับรายละเอียด; hostบล็อกใช้IdentityFileคำสั่งเพื่อระบุคีย์ส่วนตัวกับการใช้งาน ssh_config(5)manpage มีรายละเอียดแบบเต็ม


อืม .. ไม่มีไฟล์อยู่ในระบบของฉัน ควรเป็น?
James Raitsev

1
@JAM คุณใช้ระบบปฏิบัติการอะไร นอกจากนี้บางครั้งไฟล์ config อยู่ที่/etc/ssh/ssh_config

ฉันใช้ MACOS พบ/etc/ssh_configซึ่งดูเหมือนจะเป็นไฟล์ที่เต็มไปด้วยรายการแสดงความคิดเห็น
James Raitsev

@sarnold คุณสร้าง~/.ssh/configเองได้
xdazz

4

นี่อาจจะสุดยอด แต่หลังจากรันssh -vT git@github.comมันแสดงให้ฉันเห็นว่ามันกำลังตรวจสอบ/root/.sshคีย์ฉันคาดหวังว่ามันจะตรวจสอบโฮมไดเร็กทอรีของฉันจากนั้นฉันก็รู้ว่าฉันล็อกอินด้วยรูท!


เทคนิคนี้เป็นsshวิธีการแก้ปัญหาที่ถูกต้อง ขอบคุณ.
eigenfield

1

บนเซิร์ฟเวอร์ระยะไกลแก้ไขไฟล์ sshd_config และเปลี่ยน LogLevel จาก INFO เป็น VERBOSE และรีสตาร์ท ssh

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

บน Ubuntu ไฟล์เหล่านี้คือ:

/etc/ssh/sshd_config
/var/log/auth.log

แต่อาจแตกต่างกันใน Distro อื่น เพียงแค่ Google สำหรับตำแหน่งของพวกเขา (ตัวอย่างเช่นใช้ / var / log / secure)

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