สมมติว่า.ssh
ไดเรกทอรีของคุณมี 30 คีย์ (15 ส่วนตัวและ 15 สาธารณะ)
ที่ไหนใน Git สามารถตรวจสอบว่าอันไหนใช้เพื่อเชื่อมต่อกับที่เก็บระยะไกลที่กำหนด
สมมติว่า.ssh
ไดเรกทอรีของคุณมี 30 คีย์ (15 ส่วนตัวและ 15 สาธารณะ)
ที่ไหนใน Git สามารถตรวจสอบว่าอันไหนใช้เพื่อเชื่อมต่อกับที่เก็บระยะไกลที่กำหนด
คำตอบ:
รายการต่อไปนี้ใน.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 ในโหมด 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 ในระหว่างการดำเนินการคำสั่งซึ่งจะใช้คีย์ไฟล์
ssh -vv user@host 2> >(grep Offering)
- สิ่งนี้จะทำให้ง่ายขึ้น ไฟล์สุดท้ายควรเป็นคีย์สาธารณะ ตัวอย่าง:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
github
git
ไม่ได้เป็นสิ่งเดียวกับ
เว้นแต่จะระบุไว้ใน.ssh/config
ไฟล์จะใช้ไฟล์คีย์ส่วนตัวเริ่มต้น
ไฟล์ดีฟอลต์คือ~/.ssh/id_rsa
หรือ~/.ssh/id_dsa
หรือ~/.ssh/identity
ขึ้นอยู่กับเวอร์ชันโปรโตคอล
ฉันจะบอกว่าตรงกับรสนิยมของฉันมากที่สุดคือ:
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 ของคุณ
set GIT_SSH_COMMAND=ssh -v
. สิ่งนี้ช่วยให้ฉันรู้ว่า ssh-config Inlcude-Path ควรเป็นแบบนี้บน windows: Include /C/Users/YourUserName.ssh/config
เพื่อสร้าง ssh และ git ใช้ไฟล์ config ซึ่งใช้เป็นตัวอย่างHOST *
รายการเพื่อระบุไฟล์ identity git / ssh ใช้
เนื่องจากgit
ใช้เพียงssh
เชื่อมต่อจึงใช้คีย์ใดก็ได้ที่ssh
จะใช้เชื่อมต่อกับโฮสต์ระยะไกล ดู~/.ssh/config
ไฟล์สำหรับรายละเอียด; host
บล็อกใช้IdentityFile
คำสั่งเพื่อระบุคีย์ส่วนตัวกับการใช้งาน ssh_config(5)
manpage มีรายละเอียดแบบเต็ม
/etc/ssh_config
ซึ่งดูเหมือนจะเป็นไฟล์ที่เต็มไปด้วยรายการแสดงความคิดเห็น
~/.ssh/config
เองได้
นี่อาจจะสุดยอด แต่หลังจากรันssh -vT git@github.com
มันแสดงให้ฉันเห็นว่ามันกำลังตรวจสอบ/root/.ssh
คีย์ฉันคาดหวังว่ามันจะตรวจสอบโฮมไดเร็กทอรีของฉันจากนั้นฉันก็รู้ว่าฉันล็อกอินด้วยรูท!
ssh
วิธีการแก้ปัญหาที่ถูกต้อง ขอบคุณ.
บนเซิร์ฟเวอร์ระยะไกลแก้ไขไฟล์ sshd_config และเปลี่ยน LogLevel จาก INFO เป็น VERBOSE และรีสตาร์ท ssh
ตอนนี้ไฟล์บันทึกของคุณจะเก็บลายนิ้วมือของคีย์ที่ใช้ในการตรวจสอบผู้ใช้แต่ละคน
บน Ubuntu ไฟล์เหล่านี้คือ:
/etc/ssh/sshd_config
/var/log/auth.log
แต่อาจแตกต่างกันใน Distro อื่น เพียงแค่ Google สำหรับตำแหน่งของพวกเขา (ตัวอย่างเช่นใช้ / var / log / secure)