Git clone / ดึงการแช่แข็งอย่างต่อเนื่องที่“ เก็บคีย์ไว้ในแคช?”


159

ฉันพยายามโคลน repo จากบัญชี BitBucket ของฉันไปยังแล็ปท็อป Windows 10 ของฉัน (ใช้ GitBash) ฉันทำตามขั้นตอนทั้งหมดที่จำเป็นในการเชื่อมต่อเรียบร้อยแล้ว (ตั้งค่าคีย์ SSH ของฉันได้รับการยืนยันโดย SSHing สำเร็จแล้ว git@bitbucket.org ฯลฯ ) อย่างไรก็ตามเมื่อใดก็ตามที่ฉันพยายามโคลน repo พรอมต์จะวางสายอย่างต่อเนื่องหลังจากยืนยันว่าฉันต้องการแคชคีย์ของ Bitbucket

User@Laptop MINGW64 /C/Repos
$ git clone git@bitbucket.org:mygbid/test.git
Cloning into 'test'...
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n) y

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

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

คำตอบ:


189

ฉันมีปัญหานี้เมื่อโคลน repo บน Windows 10 ด้วย

ฉันได้รับมันโดยใช้ Putty GUI เพื่อ SSH ไปยังเซิร์ฟเวอร์ที่เป็นปัญหา (ในกรณีของคุณ: bitbucket.org) จากนั้นคลิก 'ใช่' เมื่อพรอมต์ถามว่าคุณต้องการบันทึกรหัสเซิร์ฟเวอร์ลงในแคชหรือไม่ การรันคำสั่ง clone อีกครั้งจากนั้นก็ใช้งานได้สำหรับฉัน!


21
นี่ไม่ได้แก้ไขโดยตรงสำหรับฉัน แต่มันทำให้ฉันตระหนักว่าปัญหาเกี่ยวข้องกับ GitBash โดยใช้ Putty สำหรับการตรวจสอบสิทธิ์ ssh แทน OpenSSH เมื่อฉันลบตัวแปรระบบ GIT_SSH และรีเซ็ต GitBash ทุกอย่างทำงานได้ดี ขอบคุณ!
MarathonStudios

2
การใช้puttyเพื่อเพิ่มgithubรหัสในแคชใช้งานได้สำหรับฉัน
โอ๊ก

4
สิ่งนี้ใช้ได้กับฉันใน Win 7 โดยใช้คอนโซลคำสั่ง ฉันหวังว่าจะมีใครบางคนสามารถบอกฉันได้ว่าทำไมสิ่งนี้จึงเกิดขึ้นแทนที่จะเป็นเพียงวิธีแก้ปัญหา
soulsabr

1
ทุกคนสามารถบอกวิธีการแก้ปัญหาดังกล่าวข้างต้น
Shreyan Mehta

2
@Shreyan Mehta เพิ่งเปิด putty ภายใต้ชื่อโฮสต์วาง git@github.com (หรือโฮสต์ที่คุณใช้) ต้องแน่ใจว่าเลือกประเภทการเชื่อมต่อของ SSH หมายเลขพอร์ตควรเป็น 22 และต้องแน่ใจว่าได้ใส่คีย์ ssh ลงในการประกวดก่อนเปิดตัว
Mr.Invisible

110
  1. เปิด Putty
  2. พิมพ์ชื่อโฮสต์ (เหมือนbitbucket.org)
  3. คลิกเปิด
  4. คลิกใช่ในป๊อปอัพเพื่อแคชคีย์โฮสต์
  5. ปิดโป๊ว

ผมมีปัญหาเหมือนกัน. ดูผลลัพธ์จาก git ดูเหมือนว่า git ไม่สามารถแคชคีย์โฮสต์ (อาจเป็นจุดบกพร่อง) ดังนั้นคุณต้องทำโดยใช้ PuTTY GUI
cambunctious

ฉันลองทุกขั้นตอน แต่เมื่อฉันเลือก 'y' หรือ 'n' ไม่มีอะไรเกิดขึ้น Git Bash ไม่ทำอะไรเลย
ทดสอบ

คุณพิมพ์ชื่อโฮสต์ที่ถูกต้องในขั้นตอนที่ 2 หรือไม่? คุณลองรีสตาร์ท Git Bash หรือไม่
cambunctious

1
สิ่งนี้แตกต่างจากคำตอบที่ยอมรับอย่างไร
zb226

1
ฉันโหวตให้คำตอบนี้เพราะมันมีขั้นตอน ฉันไม่ชอบวิธีแก้ปัญหา (คุณต้องทำซ้ำสำหรับเซิร์ฟเวอร์ SSH ทุกเครื่องที่คุณเชื่อมต่อ) เช่นเดียวกับคำตอบที่ยอมรับได้
ShooShoSha

26

เมื่อต้องการทำสิ่งนี้จาก powershell เปิดหน้าต่าง powershell และวางในรายการต่อไปนี้:

echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh git@github.com
echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh git@gist.github.com
echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh git@bitbucket.org

หรือด้วย PuTTY เวอร์ชันสแตนด์อโลน:

echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh git@github.com
echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh git@gist.github.com
echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh git@bitbucket.org

สิ่งที่ควรค่าแก่การรู้ก็คือร้านค้าที่รู้จักกันดีในชื่อโฮสต์ภายใต้คีย์รีจิสทรี :

HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys

เพื่อลัดด้านบนคุณสามารถใส่สิ่งต่อไปนี้ใน.regไฟล์และเรียกใช้:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys]
"rsa2@22:github.com"="0x23,0xab603b8511a67679bdb540db3bd2034b004ae936d06be3d760f08fcbaadb4eb4edc3b3c791c70aae9a74c95869e4774421c2abea92e554305f38b5fd414b3208e574c337e320936518462c7652c98b31e16e7da6523bd200742a6444d83fcd5e1732d03673c7b7811555487b55f0c4494f3829ece60f94255a95cb9af537d7fc8c7fe49ef318474ef2920992052265b0a06ea66d4a167fd9f3a48a1a4a307ec1eaaa5149a969a6ac5d56a5ef627e517d81fb644f5b745c4f478ecd082a9492f744aad326f76c8c4dc9100bc6ab79461d2657cb6f06dec92e6b64a6562ff0e32084ea06ce0ea9d35a583bfb00bad38c9d19703c549892e5aa78dc95e250514069"
"rsa2@22:gist.github.com"="0x23,0xab603b8511a67679bdb540db3bd2034b004ae936d06be3d760f08fcbaadb4eb4edc3b3c791c70aae9a74c95869e4774421c2abea92e554305f38b5fd414b3208e574c337e320936518462c7652c98b31e16e7da6523bd200742a6444d83fcd5e1732d03673c7b7811555487b55f0c4494f3829ece60f94255a95cb9af537d7fc8c7fe49ef318474ef2920992052265b0a06ea66d4a167fd9f3a48a1a4a307ec1eaaa5149a969a6ac5d56a5ef627e517d81fb644f5b745c4f478ecd082a9492f744aad326f76c8c4dc9100bc6ab79461d2657cb6f06dec92e6b64a6562ff0e32084ea06ce0ea9d35a583bfb00bad38c9d19703c549892e5aa78dc95e250514069"
"rsa2@22:bitbucket.org"="0x23,0xb9b88df3578371a7eb80c78bcda14fb30da436f11ca932a5fd5a8b6adfcc681df7a59cb4cb7ac966d9eac11daa38ebdbc0a6582a210ed4ee95a8d101c4abc925e942ab47535d64f9a5b3b68035c2ea1e900d709a1e8ea938718f532f9805a190446b92bac3040126225ae9d8374bc2008f106979d631734c7453f78c70091f4783b288869cb3c1941a784cd9baad823be27333833dc1f488a45b85952be75cf0a64965662302e3915378dcd5cfcd3ec903d804a29dff2fdf19df5deba4534b09e4dea6e44f152e339b3c43be98ddadfc56533192e216a3d673f00b4aa9cc9e7870acd8b6adb7e0feb77f2292fc2dede94819def3eb1e785541a06ab31ccf725f"

putty-hosts.reg ส่วนสำคัญ


2
ดูคำถามและคำตอบก่อนหน้านี้เกี่ยวกับเรื่องนี้ของ plink: serverfault.com/questions/420526/…
Josip Rodin

2
FATAL ERROR: Disconnected: No supported authentication methods available (server sent: publickey)
Azimuth

ในกรณีที่รีโมตของคุณทำงานบนพอร์ตอื่นที่ไม่ใช่ 22 คุณต้องเรียกใช้ plink กับพอร์ตโดยส่ง-P <port>อาร์กิวเมนต์
PitaJ

20

ฉันจัดการเพื่อให้มันทำงานโดยการทำงาน plink โดยตรงหลังจากที่การประกวดกำลังเรียกใช้คำสั่ง plink โดยตรง - plink.exe -agent -v git@github.comแล้วหลังจากที่คอมไพล์นี้จะทำงานได้โดยไม่ต้องแขวน


3
ทางออกที่ดี! นี้ควรมีการทำเครื่องหมายเป็นคำตอบ
Zeniths

นี่คือคำตอบที่ดีที่สุด
Brian Lacy

5

เพื่อแก้ไขปัญหานี้ฉันได้กำหนดค่า GitBash ให้ใช้ plink ด้วย-batchตัวเลือก ตัวเลือกนี้จะปิดใช้งานการแจ้งทั้งหมด - การถอนจะถูกยกเลิกโดยไม่หยุดและไม่เพิ่มลายนิ้วมือที่สำคัญในการแคช

ในการเพิ่ม-batchพารามิเตอร์ให้กับคำสั่ง plink ที่ดำเนินการโดย GitBash คุณสามารถตั้งค่าตัวเลือก git:

git config --global core.sshCommand "plink -batch"

หรือตั้งค่าGIT_SSH_COMMANDตัวแปรสภาพแวดล้อม

เอาต์พุตเมื่อคุณโคลน repo จากโฮสต์ที่ไม่รู้จักจะคล้ายกับสิ่งนี้:

The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40
Connection abandoned.
fatal: Could not read from remote repository.

หลังจากข้อความนี้คุณสามารถเพิ่มคีย์เพื่อแคชด้วยคำสั่ง:

echo y | plink git@bitbucket.org

หมายเหตุ : โปรดตรวจสอบว่ามี plink ของคุณPATHหรือไม่ หรือใช้พา ธ เหมือน UNIX ในตัวเลือก GitBash เช่น:

/c/Program\ Files/PuTTY/plink.exe -batch

1
สวัสดีฉันได้รับข้อความนี้: ข้อผิดพลาดแบบ FATAL: ยกเลิกการเชื่อมต่อ: ไม่มีวิธีการรับรองความถูกต้องที่ใช้ได้ (เซิร์ฟเวอร์ส่ง: publickey)
pungggi

4

แม้หลังจากดำเนินการตามวิธีแก้ปัญหาที่กล่าวถึงในคำตอบอื่น ๆ คุณอาจพบข้อผิดพลาดเช่น:

ข้อผิดพลาด FATAL: ตัดการเชื่อมต่อ: ไม่มีวิธีการตรวจสอบสิทธิ์ที่รองรับ (เซิร์ฟเวอร์ส่ง: publickey)

เพื่อแก้ปัญหาทั้งสองพร้อมกันเปลี่ยน git bash เพื่อใช้ SSH แทน PuTTY โดยเพิ่มสิ่งต่อไปนี้ใน~/.profileไฟล์ของคุณ( C:\Users\<Username>\.profile) หากคุณยังไม่มีไฟล์นี้ให้สร้างไฟล์ใหม่ด้วยบรรทัดนี้

GIT_SSH="/usr/bin/ssh.exe"

แล้วเปิดหน้าต่างคอมไพล์ทุบตีใหม่และลองของคุณgit cloneหรือgit pullอีกครั้ง

โปรดทราบว่าสิ่งนี้อาจทำให้คุณต้องสร้างคีย์ SSH หากคุณยังไม่มีรหัส เมื่อต้องการทำสิ่งนี้ให้ทำตามคำแนะนำบนเว็บไซต์Bitbucket

ดูคำถาม SO นี้สำหรับข้อมูลที่เกี่ยวข้อง


1

ใน git bash shell ของคุณให้ตรวจสอบว่ามี GIT_SSH:
echo $GIT<tab><tab>
ถ้ามีอยู่และตั้งค่าเป็น putty ให้เรียกใช้งาน:
unset GIT_SSH
คุณอาจต้องการใส่ลงในสคริปต์เริ่มต้น git bash
นี่ไม่ใช่วิธีการแก้ปัญหาสากล มันทำงานได้ในกรณีเฉพาะของเรา


'สคริปต์เริ่มต้นระบบ git bash' คืออะไร ฉันคุ้นเคยกับ linux จริงเท่านั้น
Jeff K

มีสคริปต์เริ่มต้นหลายรายการ บางตัวอยู่ในไดเร็กทอรี / etc คนอื่นสามารถอยู่ในไดเรกทอรีบ้านของคุณ สคริปต์เริ่มต้นใดที่จะดำเนินการขึ้นอยู่กับตัวเลือกบรรทัดคำสั่งสำหรับเชลล์ของคุณ (การเข้าสู่ระบบแบบโต้ตอบกับการเข้าสู่ระบบ) สิ่งเหล่านี้มีความเกี่ยวข้องโดยไม่คำนึงถึงระบบปฏิบัติการที่เชลล์ทำงานอยู่ด้านบน
Richard Jessop

Windows ไม่มีไดเรกทอรี '/ etc'
Jeff K

Bash shells ที่ทำงานภายใต้ Windows ทำได้ พวกเขามักจะแมปไปยังบางแห่งนอกไดเรกทอรีฐาน (หรือติดตั้ง) เปลือก ดูทุบตีคอมไพล์และทุบตี Cygwin โปรดจำไว้ว่าสิ่งเหล่านี้คือเชลล์ที่มีลักษณะและทำงานเหมือนเชลล์บนระบบลินุกซ์
Richard Jessop

0

ฟังดูงี่เง่า แต่หลังจากลองทั้งหมดข้างต้นฉันตัดสินใจติดตั้ง Git Bash ใหม่ด้วยตัวเลือกเริ่มต้นและใช้งานได้

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