ทำไมคอมไพล์จำข้อความรหัสผ่านของฉันไม่ได้ใน Windows


144

ฉันเพิ่งเริ่มใช้ git และฉันไม่สามารถจำข้อความรหัสผ่านของฉันฉันใช้ cmd.exe ยกระดับและโฮสต์ git ของฉันคือ github และฉันได้สร้างคีย์ ssh เช่นคำแนะนำใน github

แต่ฉันยังคงได้รับ

*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':

ฉันไม่ได้ใช้ msysgit ด้วยตนเอง แต่ตัวแทนการตรวจสอบสิทธิ์การเข้าประกวดอาจมีประโยชน์
Cebjyre

1
ฉันลองทุกอย่างแล้วฉันพบสิ่งนี้ใช้งานได้
Blake Niemyjski

1
Windows 10 มาพร้อมกับ OpenSSH ในบางเวลา เปิดใช้งานบริการ ssh-agent ใช้ ssh-add เพื่อเพิ่มคีย์ของคุณไปยังร้านค้า ssh และตั้งค่าGIT_SSHในสภาพแวดล้อมของคุณ (ถ้าจำเป็น) และ git / ssh จะจดจำวลีรหัสผ่านของคุณผ่าน ssh-agent ดูคำตอบของฉันด้านล่างสำหรับคำแนะนำเพิ่มเติม
d3r3kk

1
2019 เพิ่งติดตั้งคอมไพล์บน windows 10 และคอมไพล์ถามรหัสผ่านหนึ่งครั้งและจำได้
Jean-François Fabre

@ Jean-FrançoisFabreคุณอาจไม่ได้ใช้ OpenSSL
RoadRunner

คำตอบ:


206

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

ทางออกแรกถือว่า Windows, msysgit และ PuTTY

  1. ติดตั้ง msysgit และ PuTTY ตามคำแนะนำ
  2. (ไม่บังคับ) เพิ่ม PuTTY ในเส้นทางของคุณ (หากคุณไม่ทำเช่นนี้การอ้างอิงใด ๆ ไปยังคำสั่ง PuTTY ด้านล่างจะต้องนำหน้าด้วยพา ธ แบบเต็มไปยังปฏิบัติการที่เหมาะสม)
  3. หากคุณยังไม่ได้ดำเนินการให้สร้างแฮชคีย์ตามคำแนะนำที่ GitHub หรือตามคำแนะนำของโฮสต์ Git
  4. อีกครั้งถ้าคุณยังไม่ได้ทำเช่นนั้นแปลงที่สำคัญของคุณสำหรับใช้กับ pageant.exe ฉาบโดยใช้puttygen.exe คำแนะนำอยู่ในเอกสารของ PuTTY ในคำแนะนำที่เป็นประโยชน์นี้และสถานที่อื่น ๆ ในไซเบอร์สเปซ
  5. เรียกใช้pageant.exeของ PuTTY เปิดไฟล์. pkk ของคุณ ("เพิ่มคีย์") และระบุข้อความรหัสผ่านสำหรับคีย์ของคุณ
  6. กล่องโต้ตอบตัวแปรสภาพแวดล้อมของ Windows (คลิกขวาที่ "คอมพิวเตอร์" คลิกที่ "คุณสมบัติ" คลิกที่ "การตั้งค่าระบบขั้นสูง" หรือแท็บ "ขั้นสูง" คลิกที่ "ตัวแปรสภาพแวดล้อม") เพิ่มตัวแปรสภาพแวดล้อมต่อไปนี้:

    GIT_SSH = C: \ เต็ม \ เส้นทาง \ to \ plink.exe

    แทนที่ "C: \ full \ path \ to" ด้วยพา ธ การติดตั้งแบบเต็มไปยัง PuTTY โดยที่พบ plink.exe อาจเป็นการดีที่สุดที่จะเพิ่มลงในส่วน "ตัวแปรผู้ใช้" นอกจากนี้ตรวจสอบให้แน่ใจว่าเส้นทางที่คุณใช้กับ plink.exe ตรงกับเส้นทางที่คุณใช้สำหรับ Pageant (pageant.exe) ในบางกรณีคุณอาจมีการติดตั้ง PuTTY หลายครั้งเนื่องจากอาจมีการติดตั้งพร้อมกับแอปพลิเคชันอื่น การใช้ plink.exe จากการติดตั้งครั้งเดียวและ pageant.exe จากเครื่องอื่นอาจทำให้คุณมีปัญหา

  7. เปิดพรอมต์คำสั่ง

  8. หากคุณพยายามเชื่อมต่อกับที่เก็บ git ที่ Github.com ให้เรียกใช้คำสั่งต่อไปนี้:

    plink.exe git@github.com

    หากที่เก็บ git ที่คุณพยายามเชื่อมต่อนั้นถูกโฮสต์อยู่ที่อื่นให้แทนที่git@github.comด้วยชื่อผู้ใช้และ URL ที่เหมาะสม (สมมติว่า Github) คุณควรทราบว่าโฮสต์ของเซิร์ฟเวอร์ไม่ได้ถูกแคชและถามว่าคุณเชื่อถือหรือไม่ คำตอบด้วยY สิ่งนี้จะเพิ่มคีย์โฮสต์ของเซิร์ฟเวอร์ให้กับรายการโฮสต์ที่รู้จักของ PuTTY หากไม่มีคำสั่ง git ขั้นตอนนี้จะทำงานไม่ถูกต้อง หลังจากกดปุ่ม Enter Github จะแจ้งให้คุณทราบว่า Github ไม่ได้ให้การเข้าถึงเชลล์ ไม่เป็นไร ... เราไม่ต้องการมัน (หากคุณกำลังเชื่อมต่อกับโฮสต์อื่น ๆ และให้การเข้าถึงเชลล์คุณควรยกเลิกการเชื่อมโยงโดยไม่ทำสิ่งอื่นใด)

  9. ทุกอย่างเสร็จเรียบร้อย! คำสั่ง Git ควรทำงานจากบรรทัดคำสั่ง คุณอาจต้องการให้ pageant.exe โหลดไฟล์. pkk ของคุณโดยอัตโนมัติเมื่อทำการบูทขึ้นอยู่กับความถี่ที่คุณต้องการ

โซลูชันที่สองถือว่า Windows, msysgit และ TortoiseGit

TortoiseGit มาพร้อมกับ PuTTY executables และ plink รุ่นพิเศษที่เรียกว่า TortoisePlink.exe ซึ่งจะทำให้ทุกอย่างง่ายขึ้น

  1. ติดตั้ง msysgit และ TortoiseGit ตามคำแนะนำ
  2. หากคุณยังไม่ได้ดำเนินการให้สร้างแฮชคีย์ตามคำแนะนำที่ GitHub หรือตามคำแนะนำของโฮสต์ Git
  3. อีกครั้งถ้าคุณยังไม่ได้ทำเช่นนั้นแปลงที่สำคัญของคุณสำหรับใช้กับ pageant.exe TortoiseGit โดยใช้ TortoiseGit ของputtygen.exe คำแนะนำอยู่ในเอกสารของ PuTTY ในคู่มือที่เป็นประโยชน์ซึ่งเชื่อมโยงกับในโซลูชันแรกและที่อื่น ๆ ในไซเบอร์สเปซ
  4. เรียกใช้pageant.exeของ TortoiseGit เปิดไฟล์. pkk ของคุณ ("เพิ่มคีย์") และระบุข้อความรหัสผ่านสำหรับคีย์ของคุณ
  5. กล่องโต้ตอบตัวแปรสภาพแวดล้อมของ Windows (คลิกขวาที่ "คอมพิวเตอร์" คลิกที่ "คุณสมบัติ" คลิกที่ "การตั้งค่าระบบขั้นสูง" หรือแท็บ "ขั้นสูง" คลิกที่ "ตัวแปรสภาพแวดล้อม") เพิ่มตัวแปรสภาพแวดล้อมต่อไปนี้:

    GIT_SSH = C: \ เต็ม \ เส้นทาง \ to \ TortoisePlink.exe

    แทนที่ "C: \ full \ path \ to" ด้วยพา ธ การติดตั้งแบบเต็มไปยัง TortoiseGit ซึ่งพบ TortoisePlink.exe อาจเป็นการดีที่สุดที่จะเพิ่มลงในส่วน "ตัวแปรผู้ใช้" นอกจากนี้ตรวจสอบให้แน่ใจว่าเส้นทางที่คุณใช้กับ TortoisePlink.exe ตรงกับเส้นทางที่คุณใช้สำหรับ Pageant (pageant.exe) ในบางกรณีคุณอาจมีการติดตั้ง PuTTY หลายครั้งเนื่องจากอาจมีการติดตั้งพร้อมกับแอปพลิเคชันอื่น การใช้ TortoisePlink.exe จากการติดตั้ง TortoiseGit และ pageant.exe จากการติดตั้งแอปพลิเคชันอื่น (หรือจากการติดตั้ง PuTTY แบบสแตนด์อโลน) อาจทำให้คุณมีปัญหา

  6. ทุกอย่างเสร็จเรียบร้อย! คำสั่ง Git ควรทำงานจากบรรทัดคำสั่ง ในครั้งแรกที่คุณพยายามเชื่อมต่อกับที่เก็บ git ของคุณคุณอาจได้รับแจ้งว่าโฮสต์ของเซิร์ฟเวอร์ไม่ได้ถูกแคชและถามว่าคุณเชื่อถือเซิร์ฟเวอร์หรือไม่ คลิกที่ "ใช่" (นี่คือการกระทำของ TortoisePlink.exe)

    คุณอาจต้องการให้ pageant.exe โหลดไฟล์. pkk ของคุณโดยอัตโนมัติเมื่อทำการบูทขึ้นอยู่กับความถี่ที่คุณต้องการ

โซลูชันที่สามถือว่าหน้าต่างพร้อมรับคำสั่งและ msysgit

  1. ติดตั้ง msysgit
  2. ตรวจสอบให้แน่ใจว่าอนุญาตให้ใช้คอมไพล์ในพรอมต์คำสั่ง MS-DOS
  3. วิ่ง start-ssh-agent
  4. ป้อนข้อความรหัสผ่าน SSH
  5. ทุกอย่างเสร็จเรียบร้อย! คำสั่ง Git ควรทำงานในพรอมต์คำสั่งดั้งเดิม

3
หากคุณมีทั้ง GitExtensions และ TortoiseGit ซึ่งแต่ละรุ่นมีผงสำหรับอุดรูของตัวเองตรวจสอบให้แน่ใจว่าคุณตั้งค่าตัวแปรสภาพแวดล้อมGIT_SSHเป็นพา ธ ของ plink สำหรับการประกวดที่คุณใช้งานจริง
shovavnik

15
ในกรณีที่คนอื่นพบข้อผิดพลาดโง่นี้: ตรวจสอบให้แน่ใจว่าคุณใช้รูปแบบ URL ระยะไกลของ SSH (git @ host: ชื่อบัญชี / reponame.git) ไม่ใช่ URL HTTPS มิฉะนั้นจะขอรหัสผ่านนั้นต่อไป ...
Dain

เมื่อฉันเรียกใช้ plink.exe git@github.com ฉันจะได้รับ "ข้อผิดพลาด FATAL: เซิร์ฟเวอร์ปิดการเชื่อมต่อเครือข่ายโดยไม่คาดคิด"
Brett

4
หมายเหตุ: วิธีที่สามได้รับการอัปสตรีมเป็น msysgitดังนั้นคุณสามารถพิมพ์start-ssh-agentในบรรทัดคำสั่งเพื่อรับมันเพื่อบันทึกข้อความรหัสผ่าน SSH ของคุณ
Matt Clarkson

6
วิธีที่สามจะใช้งานได้จนกว่าจะมีการปิดพรอมต์คำสั่งและเฉพาะสำหรับพรอมต์คำสั่งนั้น CMD อื่น ๆ ทั้งหมดยังคงถามหาข้อความรหัสผ่าน นอกจากนี้ไคลเอนต์อื่น ๆ (VS, VS Code) ทั้งหมดไม่สามารถสื่อสารกับ git ระยะไกลได้
Dima

21

ทุกครั้งที่ฉันตั้งค่าเดสก์ท็อปใหม่ฉันลืมคำแนะนำเหล่านี้ดังนั้นฉันจึงเพิ่มคำตอบอื่นที่นี่เนื่องจากฉันสะดุดบ่อยเกินไป


ขั้นตอนด่วนสำหรับผู้ใช้ที่ใจร้อนอย่างฉัน

  1. เปิดใช้งานOpenSSH Authentication Agentบริการและเริ่มให้บริการโดยอัตโนมัติ
  2. เพิ่มคีย์ SSH ของคุณไปยังตัวแทนด้วยssh-addในบรรทัดคำสั่ง
  3. ทดสอบการรวมคอมไพล์หากยังถามรหัสผ่านของคุณอยู่ให้ดำเนินการต่อ
  4. เพิ่มตัวแปรสภาพแวดล้อม$ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exeให้กับเซสชันของคุณหรืออย่างถาวรในสภาพแวดล้อมผู้ใช้ของคุณ

ขั้นตอนโดยละเอียด: ภาพรวม

Windows ได้จัดส่งกับ OpenSSH มาระยะหนึ่งแล้ว มันมีบิตที่จำเป็นทั้งหมดสำหรับ ssh ที่จะทำงานร่วมกับ Git แต่ก็ยังคงต้องการ TLC บางส่วนก่อนที่มันจะทำงานได้อย่างราบรื่น 100% นี่คือขั้นตอนที่ฉันติดตามด้วยความสำเร็จตั้งแต่ Windows เวอร์ชั่น 10.0.18362.449 (คุณสามารถดูรุ่น Windows 10 ของคุณได้โดยการเปิดเชลล์ cmd.exe และพิมพ์ver)

ฉันสมมติที่นี่ว่าคุณมีการตั้งค่าคีย์ SSH ของคุณแล้วและตั้งอยู่ที่ ~/.ssh/id_rsa

เปิดใช้งานบริการ ssh-agent ในกล่อง Windows 10 ของคุณ

  1. เริ่ม -> พิมพ์ 'บริการ' และคลิกที่แอปบริการที่ปรากฏขึ้น
  2. ค้นหาOpenSSH Authentication Agentบริการในรายการ
  3. คลิกขวาที่OpenSSH Authentication Agentบริการแล้วเลือก 'คุณสมบัติ'
  4. เปลี่ยนไปStartup type:Automatic
  5. คลิกที่ปุ่มเพื่อเปลี่ยนสถานะบริการเพื่อStartRunning
  6. ปิดกล่องโต้ตอบโดยคลิกOKแล้วปิดแอพ Services

เพิ่มรหัสของคุณไปที่ ssh-agent

  1. เปิดเปลือกของคุณของการตั้งค่า(ฉันจะใช้ Windows PowerShell ในตัวอย่างนี้นำไปใช้กับ Powershell แกนเกินไป)
  2. เพิ่มคีย์ SSH ของคุณไปที่ssh-agent: (คุณสามารถเพิ่มเส้นทางไปยังที่สำคัญของคุณเป็นอาร์กิวเมนต์แรกถ้ามันแตกต่างจากค่าเริ่มต้น)ssh-add
  3. ป้อนข้อความรหัสผ่านของคุณหาก / เมื่อได้รับแจ้งให้ทำเช่นนั้น

ลอง Git + SSH

  1. เปิดเปลือกของคุณ(อีกครั้งฉันใช้ Powershell)และโคลน repogit clone git@github.com:octocat/Spoon-Knife
  2. หากคุณเห็นพรอมต์นี้ให้ไปที่หัวข้อถัดไป:
Enter passphrase for key '/c/Users/your_user_name/.ssh/id_rsa':

ตั้งค่าGIT_SSHตัวแปรสภาพแวดล้อมของคุณ

ในเซสชันใด ๆ คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมนี้และพรอมต์สำหรับข้อความรหัสผ่านของคุณจะหยุดขึ้นและ ssh จะใช้ssh-agentในนามของคุณ หรือคุณสามารถตั้งรหัสผ่านของคุณในสภาพแวดล้อมของผู้ใช้อย่างถาวร

ในการตั้งค่าGIT_SSHในเชลล์ปัจจุบันเท่านั้น:

  1. เปิดเปลือกของการตั้งค่า (Power Powershell สำหรับฉัน)
  2. ตั้งค่าตัวแปรสภาพแวดล้อม GIT_SSH ให้เหมาะสมssh.exe:$Env:GIT_SSH=$((Get-Command -Name ssh).Source)
  3. ลองทำตามขั้นตอนในลอง Git + SSHด้านบน

เพื่อตั้งค่าGIT_SSHอย่างถาวร

  1. เปิด File Explorer Start-> พิมพ์ 'File Explorer' และคลิกที่มันในรายการ
  2. คลิกขวา 'พีซีเครื่องนี้' และคลิกที่ 'คุณสมบัติ'
  3. คลิกที่ 'การตั้งค่าระบบขั้นสูง'
  4. คลิกปุ่ม 'ตัวแปรสภาพแวดล้อม ... '
  5. ใต้ 'ตัวแปรผู้ใช้สำหรับ your_user_name' คลิกใหม่ ...
  6. ตั้งค่าVariable name:ฟิลด์เป็น GIT_SSH
  7. ตั้งค่าVariable value:ฟิลด์เป็น path-to-ssh.exe (โดยทั่วไปC:\Windows\System32\OpenSSH\ssh.exe)
  8. คลิกตกลงเพื่อปิดกล่องโต้ตอบตัวแปรผู้ใช้ใหม่
  9. คลิกตกลงเพื่อปิดกล่องโต้ตอบตัวแปรสภาพแวดล้อม
  10. ลองทำตามขั้นตอนในลอง Git + SSHด้านบน

โปรดทราบว่านี่อาจจะเปลี่ยนไปตามขั้นตอน / ขั้นตอนใหม่เมื่อ Windows 10 ดำเนินการต่อไปและเมื่อฉันเรียนรู้เพิ่มเติม ฉันจะพยายามอัปเดตสิ่งนี้ต่อไปฉันหวังว่าจะได้ข้อเสนอแนะในความคิดเห็น


3
นี่เป็นคำตอบที่สมบูรณ์แบบที่สุดในวันที่ 1/31/2020 อย่างน้อยสำหรับ Windows ไม่จำเป็นต้องติดตั้ง PUTTY หรืออะไรเลย
เจค

ตกลง ดูเหมือนว่าการสนับสนุนในตัวอยู่ที่นี่ในที่สุด
Eron Lloyd

ตำนาน! นี่เป็นการแก้ไขปัญหาของฉัน รับการมองหาวิธีการในขณะที่ลองสิ่งที่แตกต่างและนี่คือมือ awnser ที่สมบูรณ์แบบที่สุดสำหรับปัญหานี้
Collin

ขอบคุณสำหรับคำตอบที่ดีและเป็นสิ่งที่ช่วยฉันได้ไม่กี่ชั่วโมง +1
Angry 84

20

สำหรับใครก็ตามที่ต้องการคำแนะนำโดยละเอียดเพิ่มเติมดูที่หน้านี้: http://help.github.com/working-with-key-passphrases/


สิ่งที่ฉันต้องการสำหรับการใช้msysgitเปลือก
arthurakay

1
ทำงานให้ฉันเมื่อใช้ Git Bash Desktop App ฉันใช้notepad ~/.profileและคัดลอกวางเนื้อหาจากลิงค์นั้นรีสตาร์ท Git Bash ป้อนรหัสผ่านทำกำไร ...
Daryn

ฉันติดตาม "ส่วนการเรียกใช้ ssh-agent บน Git สำหรับ Windows" โดยอัตโนมัติ (ใช้ git 2.x ใน Win 10) แต่ก็ยังขอรหัสผ่านฉันตลอดเวลา ทำตามวิธีแก้ปัญหาแรก (ฉาบ) จากคำตอบที่ยอมรับแก้ไขปัญหานี้ให้ฉัน
jakub.g

20

ในกรณีที่คุณกำลังใช้Git ทุบตีภายใต้ของ Windowsคุณสามารถดำเนินการต่อไปนี้:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

มันจะถามวลีรหัสผ่านในคำสั่งที่สองและนั่นคือ การดำเนินการเพิ่มเติมแต่ละรายการที่คุณจะต้องทำ (ซึ่งครั้งหนึ่งต้องใช้วลีรหัสผ่าน) จะไม่ขอให้คุณใช้วลีรหัสผ่าน (ดูตัวอย่างในภาพหน้าจอด้านล่าง):

การเพิ่มวลีรหัสผ่านใน Git bash บน Windows


2
นอกจากนี้ยังทำงานในระบบย่อยอูบุนตูใน Windows 10
meetar

1
โปรดทราบว่าหาก
คีย์แพร์

13

ทางออกพิเศษหนึ่งข้อ 5 ปี 8 เดือนและ 6 วันหลังจากโพสต์คำถามจะไม่เป็นความคิดที่แย่ดังนั้นที่นี่จะไป

หมายเหตุ:สมมติว่าคุณใช้คอมพิวเตอร์ที่ใช้ windows

  1. ดาวน์โหลดGit-ข้อมูลประจำตัว-วิน
  2. เรียกใช้! หากคุณมี GIT ในPATHตัวแปรสภาพแวดล้อมของคุณมันควรจะใช้ได้ git-credential-winstore -i C:\Path\To\Git.exeหากคุณไม่ได้วิ่ง

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


เพื่อความรู้ของคุณ ... ข้อมูลประจำตัวของคุณจะถูกเก็บไว้ใน Windows Credential Store

คุณเก็บข้อมูลรับรองของฉันอยู่ที่ไหน

แอพนี้ใช้ที่เก็บข้อมูลรับรอง Windows ที่มีอยู่เพื่อเก็บข้อมูลรับรองของคุณ คุณสามารถดูข้อมูลรับรองที่เก็บไว้ได้โดยไปที่แผงควบคุม> บัญชีผู้ใช้> ตัวจัดการข้อมูลรับรองและเลือก "ข้อมูลรับรอง Windows" รายการที่เริ่มต้น "git:" มาจาก git-credential-winstore


8
วิธีการแก้ปัญหานี้ดูเหมือนจะไม่ทำงานกับ repos SSH เพียง HTTPS / angryface
JasonCoder

8

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

ssh-agent อาจทำงานได้เช่นกัน ลองเรียกใช้และดูว่ามันจะจดจำข้อความรหัสผ่านของคุณหรือไม่


การทำงานssh-keygen -pควรอนุญาตให้ OP ตั้งค่าข้อความรหัสผ่านไม่ได้
luchosrock

ยังคงพร้อมท์ให้ใส่รหัสผ่าน
เมื่อ

7

[แก้ไข - อ่านคำถามผิด ๆ นี่คือคำตอบของปัญหาที่เกี่ยวข้อง ออกจากรุ่นที่ปรับปรุงใหม่สำหรับลูกหลาน]

กรณีของฉันคือฉันพยายามผลักดันให้ repo ที่โฮสต์บนเซิร์ฟเวอร์ของเรา เมื่อใดก็ตามที่ฉันพยายามกด git จะขอรหัสผ่านของฉัน (รหัสผ่าน nb - ไม่ใช่รหัสผ่านสำหรับรหัสส่วนตัวของฉัน)

ด้วยการเพิ่มกุญแจสาธารณะของฉันให้กับคีย์ที่ได้รับอนุญาตบนเซิร์ฟเวอร์ฉันสามารถรับรหัสผ่านที่ไม่มีรหัสผ่านไปยังเซิร์ฟเวอร์นั้นได้ และเนื่องจากไม่มีข้อความรหัสผ่านในคีย์ส่วนตัวของฉัน (ซึ่งเป็นการปฏิบัติที่ไม่ดี btw!) ฉันไม่จำเป็นต้องพิมพ์อะไรเลย

นี่คือคำสั่งเพื่อเพิ่มกุญแจสาธารณะของคุณไปยังเซิร์ฟเวอร์ ถือว่าผู้ใช้gitเป็นผู้ใช้บนเซิร์ฟเวอร์

cat .ssh/id_rsa.pub | ssh git@GIT_MASTER_IP 'cat >> .ssh/authorized_keys'

คุณสามารถทำสิ่งเดียวกันโดยการล็อกออนเข้าสู่เซิร์ฟเวอร์และต่อท้ายกุญแจสาธารณะของคุณไปยังไฟล์ที่ ~/.ssh/authorized_keys


คุณช่วยแปลงสิ่งนี้เป็นคำอธิบายที่คนที่ไม่มีสิทธิ์เข้าถึงเชลล์ได้หรือไม่? เช่นเราควรใส่อะไรใน authorized_keys โดยใช้ notepad หรือคล้ายกัน?
John Little

4

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

GitHub จัดหาเครื่องมือติดตั้งที่มีประโยชน์มากซึ่งทำให้ทุกอย่างเป็นเรื่องง่ายและดี: https://help.github.com/articles/caching-your-github-password-in-git/


โปรดทราบว่านี่เป็นการแคชรหัสผ่าน GitHub ของคุณไม่ใช่ข้อความรหัสผ่านของคีย์ GPG
Judge2020

4

สมมติว่าคุณต้องการใช้Git Bash อย่างแท้จริงอย่างเดียวโดยไม่ต้องใช้ TortoiseGit หรือ PuTTY นอกจากนี้คุณไม่ต้องการเก็บข้อความรหัสผ่านของคุณอย่างถาวรเพราะมันเกือบจะเหมือนกับว่าคุณได้สร้างคีย์ SSH โดยไม่มีข้อความรหัสผ่านในตอนแรก แต่คุณยังต้องการใช้แคช

สำหรับssh-agentกระบวนการแคชวัตถุประสงค์ใช้ซึ่งรวมอยู่ในการแจกจ่าย Git Bash กระบวนการนี้ไม่ได้เริ่มต้นตามค่าเริ่มต้นดังนั้นจึงจำเป็นต้องเปิดใช้ก่อน สำหรับคีย์ SSH ใด ๆ ที่จะถูกแคชควรเพิ่มในกระบวนการนี้ด้วยssh-addคำสั่งซึ่งจะแจ้งให้คุณใส่รหัสผ่านของคีย์และเก็บไว้ในหน่วยความจำ

ข้อเสียของการแก้ปัญหาอื่น ๆ :

  • เปิดใช้งานอัตโนมัติssh-agentเช่นเดียวกับในบทความของ GitHubขอรหัสผ่านทันทีตั้งแต่เริ่มต้นเมื่อคุณเรียกใช้ Git Bash ไม่ว่าคุณจะต้องใช้คีย์ SSH ของคุณในช่วงนี้หรือไม่ก็ตาม หากคุณกำลังทำงานกับ repo ในพื้นที่ของคุณในวันนี้คุณอาจต้องการระบุข้อความรหัสผ่านเมื่อจำเป็นจริงๆเท่านั้น (เช่นเมื่อมีปฏิสัมพันธ์กับ repo ระยะไกล)
  • ถ้าคุณเปิดของคุณssh-agentเหมือนในGitLab ของบทความที่มีeval $(ssh-agent -s)คุณอาจรู้สึกเบื่อที่จะพิมพ์สิ่งนั้นในแต่ละครั้ง ในที่สุดโอกาสที่คุณจะเพิ่มสองบรรทัดเหล่านั้นใน.bashrcเพื่อเปิดใช้อัตโนมัติ ข้อเสียเหมือนกันกับข้างบนบวกอีกหนึ่ง: แต่ละครั้งที่คุณเปิดตัวเทอร์มินัล Git Bash ใหม่คุณจะได้รับกระบวนการ ssh-agent เพิ่มเติม (สคริปต์ทุบตีของ GitHub จะตรวจสอบว่ากระบวนการนั้นได้เริ่มขึ้นแล้ว)
  • เหมือนทั้งสองข้างต้น แต่โดยเฉพาะอย่างยิ่งเมื่อคุณมีคีย์ SSH แยกต่างหากสำหรับโฮสต์ที่แตกต่างกันเช่นหนึ่งสำหรับ GitHub และอีกหนึ่งสำหรับ GitLab ดังนั้นการให้พวกเขาทั้งหมดในครั้งเดียวนั้นน่ารำคาญและไม่สะดวก

ดังนั้นวิธีนี้เหมาะสำหรับผู้ที่สงสัยว่าจะทำให้ Git Bash ถามวลีรหัสผ่านเพียงครั้งเดียวต่อการใช้งาน Windows ได้เพียงครั้งเดียวและเมื่อจำเป็นจริงๆ มันคล้ายกับพฤติกรรมของการจัดการข้อความรหัสผ่านด้วย GnuPG ที่กระทำการลงชื่ออัตโนมัติโดยใช้default-cache-ttlโดยใช้

การกำหนดค่า SSH เพื่อถามวลีรหัสผ่านหนึ่งครั้งเมื่อจำเป็นต้องใช้ Git Bash เท่านั้น

  1. อันดับแรกเราต้องการเปิดตัวอัตโนมัติssh-agentเมื่อเริ่มต้นเชลล์ Git Bash เราจะใช้สคริปต์ของ GitHub ที่ได้รับการแก้ไขเพื่อตรวจสอบว่ากระบวนการดังกล่าวได้เริ่มขึ้นแล้ว แต่เราไม่ต้องการให้มันเป็นssh-addกุญแจทันที สคริปต์นี้ไปที่ของคุณ~/.bashrcหรือ( ~/.profileหรือเป็นโฮมไดเร็กตอรี่ของผู้ใช้ของคุณเช่น- รันและจากนั้นให้ Git Bash พิมพ์ออกมา): ~/.bash_profile~C:\Users\Usernamecd ~pwd

    ### Start ssh-agent
    
    env=~/.ssh/agent.env
    
    agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
    
    agent_start () {
        (umask 077; ssh-agent >| "$env")  # use -t here for timeout
        . "$env" >| /dev/null ; }
    
    agent_load_env
    
    # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
    agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
    
    if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
        agent_start
    fi
    
    unset env
  2. ตอนนี้แก้ไขหรือสร้าง~/.ssh/configไฟล์และเพิ่มAddKeysToAgentตัวเลือกสำหรับโฮสต์ stanza แต่ละรายการที่คุณต้องการเปิดใช้งานการแคช (คุณสามารถเปิดใช้งานได้ทั่วโลกโดยวางคำสั่งไว้ที่จุดเริ่มต้นของไฟล์ก่อนการประกาศโฮสต์ทั้งหมด):

    # GitHub.com
    Host github.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_github
      AddKeysToAgent yes
    
    # GitLab.com
    Host gitlab.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_gitlab
      AddKeysToAgent yes

    จากชายคนหนึ่งตั้งค่า SSH หน้า :ถ้าตัวเลือกนี้ถูกกำหนดเป็นใช่และคีย์ถูกโหลดจากไฟล์ที่สำคัญและรหัสผ่านสำหรับการมีเพิ่มตัวแทนกับอายุการใช้งานเริ่มต้นเช่นถ้าโดย SSH เพิ่ม (1)

อายุการใช้งานสูงสุดเริ่มต้นคือตลอดไปหรือจนกว่าssh-agentกระบวนการจะถูกฆ่า (ด้วยตนเองจากตัวจัดการงานหรือเมื่อพีซีของคุณปิดตัวลง) หากคุณต้องการใช้การหมดเวลา จำกัด คุณสามารถตั้งค่าด้วย-tพารามิเตอร์ของ ssh-agent เปลี่ยนบรรทัดในสคริปต์ทุบตีจากขั้นตอนแรกข้างต้นเช่นสำหรับอายุการใช้งานแคช 30 นาทีที่สำคัญ:

(umask 077; ssh-agent -t 30m >| "$env")

ดูที่นี่สำหรับตัวระบุรูปแบบเวลาอื่น


3

คุณสามารถสร้าง.bashrcไฟล์ในโฮมไดเร็กตอรี่ที่ผู้ใช้ของคุณชอบC:/Users/youruserและใส่ไว้ที่:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

สคริปต์นี้รันทุกครั้งหลังจากการทุบตีทำงาน ดังนั้นคุณจะต้องป้อนรหัสผ่านเพียงครั้งเดียวเมื่อgit-bashเริ่ม!

ทุบตีบางรุ่นต้องการ.bash_profileไฟล์แทน.bashrcดังนั้นในกรณีโคลน.bashrc:

copy .bashrc .bash_profile

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