วิธีการทดสอบการเชื่อมต่อ Git ผ่าน SSH จริงๆหรือ?


109

เมื่อใช้ GIT ฉันมีปัญหากับการใช้ GIT บน SSHและเนื่องจากมันใช้งานได้ดีทั้งจากที่ทำงานและที่บ้านด้วยโมเด็มที่แตกต่างกัน ฉันไม่มีปัญหาในการเชื่อมต่อผ่าน HTTP

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

สวยมากทุกคน "ขนาดใหญ่" คำสั่ง (เช่นfetch, cloneหรือpushที่มีข้อมูลมาก) จากgit(แม้ในขณะที่ทำงานด้วย-v) เพียงแค่ "แขวน" ในช่วงกลางของการเชื่อมต่อระยะไกลที่มีข้อบ่งชี้ว่าทำไมพวกเขาได้หยุดเพื่อให้พวกเขามีการใช้ไม่ .

มีวิธีใดบ้างที่ฉันจะได้รับรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้นในการเชื่อมต่อ SSH?

คำตอบ:


113

ตัวแปรสภาพแวดล้อม

จาก Git เวอร์ชัน 2.3.0 คุณสามารถใช้ตัวแปรสภาพแวดล้อมGIT_SSH_COMMANDและส่งผ่าน-vอาร์กิวเมนต์ verbose ดังนี้:

GIT_SSH_COMMAND="ssh -v" git clone example

หากต้องการเป็น verbose พิเศษให้ทำ-vvv:

GIT_SSH_COMMAND="ssh -vvv" git clone example

Git config

จาก Git เวอร์ชั่น 2.10.0 ซึ่งจะอยู่ใน repos ของ Ubuntu 17.04 คุณสามารถบันทึกการกำหนดค่านี้ได้ทั่วโลกหรือต่อ repo ดังตัวอย่างนี้:

git config core.sshCommand "ssh -vvv"
git pull

สำหรับผมอย่างน้อยถ้าผมทำนี้GIT_SSH_COMMAND="ssh -v" git clone exampleผมสามารถแก้ปัญหา SSH รุ่นก็พิมพ์หลังจากCloning intoข้อความ git cloneแต่ไม่สำเร็จ หลังจากฉันลบGIT_SSH_COMMANDมันทำงาน ในท้ายที่สุดให้บริการวัตถุประสงค์
เปาโลโอลีฟวีรา

5
นี่เป็นครั้งเดียวที่ดีกว่า:git -c core.sshCommand="ssh -vvv" pull
Joseph K. Strauss

git config --global core.sshCommand "ssh -vvv" git clone example
Azodium

81

ฉันมีปัญหาที่คล้ายกัน สำหรับการแก้ไขข้อบกพร่องฉันเพิ่มบรรทัดใน ssh_config ของฉัน นี่คือวิธีที่ฉันทำ:

git remote -v

คุณจะพบบรรทัดดังนี้:

origin  git@github.com:me/test.git (fetch)
origin  git@github.com:me/test.git (push)

github.comในกรณีนี้โฮสต์ ตอนนี้คุณสามารถเพิ่มรายการโฮสต์ในการตั้งค่าของคุณ:

vim ~/.ssh/config

และเพิ่ม:

Host github.com
    LogLevel DEBUG3

ในการใช้การทำงานคอมไพล์คุณควรได้รับข้อความดีบั๊กมากมายตอนนี้ หากต้องการรับข้อความดีบั๊กที่น้อยลงให้ลองใช้DEBUG1

สำหรับรุ่น GIT> = 2.3.0ดูคำตอบจาก @Flimmสำหรับโซลูชันที่ชาญฉลาดขึ้น


14

อ่านผ่านman gitมีบางตัวแปรด้านสิ่งแวดล้อมที่มีประโยชน์ที่คุณสามารถตั้งค่าและGIT_TRACE_PACKET GIT_TRACEตัวอย่างเช่น:

GIT_TRACE_PACKET=true git clone ssh://[...]

สายไปนิดหน่อยกับเกม แต่หวังว่านี่จะช่วยให้ใครบางคน!


1
สิ่งนี้มีประโยชน์ แต่คุณไม่ได้รับข้อความใด ๆ เกี่ยวกับปัญหาการเชื่อมต่อกับ SSH แต่ถ้าการเชื่อมต่อ SSH ใช้งานได้นี่เป็นวิธีการแก้ไขข้อบกพร่องเพิ่มเติม
Trendfischer

5

ต่อman ssh:

 -v      Verbose mode.  Causes ssh to print debugging messages about its progress.  This
         is helpful in debugging connection, authentication, and configuration problems.
         Multiple -v options increase the verbosity.  The maximum is 3.

ssh -vดังนั้นพยายาม หากไม่ได้บอกสิ่งที่คุณต้องรู้คุณสามารถเพิ่มหนึ่งหรือสองvs สำหรับข้อมูลการดีบักที่ละเอียดยิ่งขึ้น สำหรับ Github ssh -vvvT git@github.comโดยเฉพาะอย่างยิ่งลอง

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


ขอบคุณสำหรับคำตอบ แต่ฉันน่าจะถามคำถามต่างกัน (เนื่องจาก GitHub ไม่อนุญาตการเชื่อมต่อ SSH โดยตรงเช่นนั้น) ฉันแก้ไขโพสต์และชื่อเรื่อง แต่ควรจะทิ้งคำถามนี้และสร้างคำถามใหม่แทนหรือไม่
IQAndreas

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

1
ฉันได้รับการรับรองความถูกต้องแล้วและบางครั้งpush/ pullใน repo โดยไม่มีปัญหา แต่บ่อยครั้งที่มันแค่ "แฮงค์" ที่อยู่ตรงกลางของคำสั่งและจะไม่ดำเนินการต่อ (โดยเฉพาะเมื่อฉันถ่ายโอนข้อมูลจำนวนมากเช่นใหญ่cloneหรือpush) ไม่มีข้อความแสดงข้อผิดพลาดมันอยู่ที่นั่นและไม่ดำเนินการต่อ
IQAndreas

3

ฉันไม่เห็นวิธีที่จะบอก git (1) คำสั่งภายนอกที่จะใช้สำหรับ ssh (1) แต่เป็นวิธีแก้ปัญหาเพียงแค่เปลี่ยนชื่อ / path / to / ssh เป็น /path/to/ssh.orig สร้างเชลล์ สคริปต์ wrapper / path / to / ssh และเพิ่มในแฟล็ก -v:

$ sudo mv /usr/bin/ssh /usr/bin/ssh.orig
$ sudo vim /usr/bin/ssh
$ cat /usr/bin/ssh
#!/bin/sh

if [ -x /usr/bin/ssh.orig ]; then
    exec /usr/bin/ssh.orig -v -v -v "${@}"
fi

$ sudo chmod a+x /usr/bin/ssh

ฉันได้รับผลลัพธ์ verbose เมื่อรันคำสั่ง git ปฏิบัติการผ่านการขนส่ง ssh เมื่อทำการดีบักเสร็จแล้วให้ลบสคริปต์และเรียกคืน /path/to/ssh.orig ไปที่ / path / to / ssh


4
แทนการย้ายไฟล์ในพิจารณาการวางสคริปต์เสื้อคลุมใน/usr/bin /usr/local/bin
muru

2
อย่างน้อยในการติดตั้ง Windows แปลก ๆ ของฉันตัวแปรสภาพแวดล้อมGIT_SSHสามารถตั้งค่าให้ชี้ไปที่ไบนารีที่คุณต้องการให้ใช้ Git
Coderer

ตามที่กล่าวไว้คุณไม่ต้องการแก้ไขไฟล์ ssh ดั้งเดิม แต่ฉันจะต้องจองเกี่ยวกับวิธีแก้ปัญหาใน / usr / local / มันไม่โปร่งใสและเหยียบได้ง่าย ดีกว่า: ใส่สคริปต์วิธีแก้ปัญหาของคุณลงใน $ HOME / bin และเพิ่ม bin ใหม่ที่ต้องการในตัวแปร $ PATH ของผู้ใช้ของคุณก่อนส่วนเส้นทางอื่น ๆ และก่อนที่จะทำเช่นนั้นฉันจะตรวจสอบว่าไม่มีวิธีการแก้ปัญหา ENV ที่ดีกว่านี้หรือไม่ (คำตอบนี้เก่า)
Scott Prive
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.