Git push ต้องการชื่อผู้ใช้และรหัสผ่าน


1435

ฉันโคลนที่เก็บ Git จากบัญชี GitHub ของฉันไปยังพีซีของฉัน

ฉันต้องการทำงานกับทั้งพีซีและแล็ปท็อป แต่ด้วยบัญชี GitHub เดียว

เมื่อฉันพยายามที่จะผลักดันหรือดึงจาก GitHub โดยใช้พีซีของฉันมันต้องมีชื่อผู้ใช้และรหัสผ่าน แต่ไม่ใช่เมื่อฉันใช้แล็ปท็อป!

ฉันไม่ต้องการพิมพ์ชื่อผู้ใช้และรหัสผ่านทุกครั้งที่ทำปฏิกิริยากับ  originฉัน ฉันหายไปนี่อะไร


1
ใช่ แต่ฉันควรทำอย่างไร ฉันสร้าง keygen มีอะไรอีกบ้าง
TooCooL

1
คุณต้องลงทะเบียน pubkey ด้วยบัญชี Github ของคุณ ( github.com/account/ssh ) และกำหนดค่าไคลเอนต์ SSH ของคุณเพื่อใช้ชื่อผู้ใช้ที่ถูกต้อง
jwodder

1
ฉันทำทั้งหมดแล้ว แต่ก็ยังต้องมีชื่อผู้ใช้และรหัสผ่าน! เป็นไปได้หรือไม่ที่จะใช้หนึ่งบัญชีกับพีซีสองเครื่อง?
TooCooL

1
คำถามนี้ครอบคลุมตัวเลือกทั้งหมดของคุณสำหรับเรื่องนี้ค่อนข้างดี: stackoverflow.com/questions/5343068/…
ฟอร์ด

2
ไม่จำเป็นต้องสลับไปใช้ ssh อีกต่อไป เป็นไปได้ด้วย HTTPS เช่นกัน ตรวจสอบคำตอบของฉัน
Varun Achar

คำตอบ:


1960

สาเหตุที่พบบ่อยคือการโคลนโดยใช้ค่าเริ่มต้น (HTTPS) แทน SSH คุณสามารถแก้ไขได้โดยไปที่ที่เก็บของคุณคลิก "โคลนหรือดาวน์โหลด" จากนั้นคลิกปุ่ม "ใช้ SSH" ด้านบนฟิลด์ URL และอัปเดต URL ของรีโมทต้นทางของคุณเช่นนี้:

git remote set-url origin git@github.com:username/repo.git

นี้เป็นเอกสารที่ GitHub: Switching URL ที่ระยะไกลจาก HTTPS เพื่อ SSH


61
และการที่จะคิดออกว่าจะเปลี่ยน URL ไปที่นี่: stackoverflow.com/a/2432799/60488 (สปอยเลอร์: git remote set-url origin git://new.url.here)
โยฮันคูล

136
หากคุณไม่สามารถใช้ ssh สำหรับข้อ จำกัด ด้านความปลอดภัย (เช่นฉัน) คุณสามารถทำได้: git remote set-url origin https://name:password@github.com/repo.git (แยกจากความคิดเห็นที่นี่)
Bruno Berisso

134
ทำไมการโคลนด้วย HTTPS จึงเป็นข้อผิดพลาดทั่วไป? ตอนนี้ GitHub แนะนำให้ใช้ HTTPS
Dennis

8
@smftre โดยค่าเริ่มต้นเป็นกรณีที่ แต่คุณสามารถใช้ผู้ช่วยในการแคชข้อมูลประจำตัวของคุณ
Dennis

28
แก้ไขของฉันPermission denied (publickey)โดยใช้คู่มือนี้: help.github.com/articles/generating-ssh-keys
voltrevo

386

การตรวจสอบสิทธิ์อย่างถาวรด้วยที่เก็บ Git

รันคำสั่งต่อไปนี้เพื่อเปิดใช้งานการแคชหนังสือรับรอง :

$ git config credential.helper store
$ git push https://github.com/owner/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

นอกจากนี้คุณยังควรระบุแคชหมดอายุ ,

git config --global credential.helper 'cache --timeout 7200'

หลังจากเปิดใช้งานการแคชข้อมูลประจำตัวก็จะถูกเก็บไว้สำหรับ7200 วินาที (2 ชั่วโมง)


คุณอาจต้องเปลี่ยน URL ระยะไกลด้วยgit remote set-url origin https://git@github.com/<owner>/<repo>.git ซึ่งสามารถใช้งานได้กับ 2FA
Bron Davies

14
นี่ควรเป็นคำตอบที่ยอมรับได้ มันตอบคำถามตรงๆ
อับราฮัม TS

มันจะถูกลบโดยอัตโนมัติจากไฟล์ ubuntu ถึงหลัง 7200 เพื่อความปลอดภัยหรือไม่
usama

หรือ 43,200 เป็นเวลา 12 ชั่วโมง คุณเข้าสู่ระบบวันละครั้ง นั่นอาจจะสมเหตุสมผลกว่าสำหรับบางคน
Urasquirrel

เพิ่งลองสิ่งนี้ - ได้รับ:fatal: protocol 'https' is not supported
Joel

134

ฉันเพิ่งเจอปัญหาเดียวกันและวิธีแก้ปัญหาที่ง่ายที่สุดที่ฉันพบคือใช้ URL ของ SSH แทน HTTPS

ssh://git@github.com/username/repo.git

และไม่ใช่สิ่งนี้:

https://github.com/username/repo.git

ตอนนี้คุณสามารถตรวจสอบที่มีเพียงคีย์ SSH แทนและusernamepassword


1
วิธีที่ง่ายที่สุดในการแก้ไขปัญหาเพียงแก้ไข URL ต้นทางระยะไกล นั่นคือทั้งหมดที่ เสร็จสิ้น Thanx!
JOM

1
สิ่งนี้ใช้ได้สำหรับฉัน แต่ก่อนอื่นฉันต้องจัดการเรื่องนี้: stackoverflow.com/questions/2643502/…
Sridhar Sarnobat

เพื่อตั้งค่าคีย์ SSH คุณสามารถอ้างถึงhelp.github.com/articles/connecting-to-github-with-ssh
ksridhar

120

นอกเหนือจากการเปลี่ยนเป็น SSH คุณยังสามารถใช้ HTTPS ต่อไปได้หากคุณไม่สนใจที่จะใส่รหัสผ่านของคุณเป็นข้อความที่ชัดเจน ใส่ในของคุณ~/.netrcและมันจะไม่ถามชื่อผู้ใช้ / รหัสผ่านของคุณ (อย่างน้อยบน Linux และ Mac):

machine github.com
       login <user>
       password <password>

นอกจากนี้ (ดูความคิดเห็นที่สองของ VonC) บน Windows %HOME%\_netrcชื่อไฟล์เป็น

อ่านความคิดเห็นแรกของ VonC ในกรณีที่คุณต้องการเข้ารหัส

นอกจากนี้อีก (ดูความคิดเห็นของ user137717) ซึ่งคุณสามารถใช้ถ้าคุณมีGit 1.7.10 หรือใหม่กว่า

แคชรหัสผ่าน GitHub ของคุณใน Git โดยใช้ผู้ช่วยข้อมูลประจำตัว :

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

สิ่งนี้ยังทำงานบน Linux, Mac และ Windows


3
ใช่มันใช้งานได้บน Linux แต่ไม่สามารถใช้งานได้กับ gitbash บน Windows
ฝ่ายขาย Dielson

3
@dolmen ฉันเห็นสิ่งที่คุณหมายถึง แต่ถ้าคุณใจใส่รหัสผ่านของคุณในข้อความที่ชัดเจน, คุณสามารถ ... เข้ารหัสมัน;) ดูstackoverflow.com/a/18362082/6309 และยังสามารถใช้งานร่วมกับการตรวจสอบสิทธิ์ 2 ระดับ (2FA) ของ Github: stackoverflow.com/a/18607931/6309
VonC

3
@Sales มันทำงานได้อย่างสมบูรณ์แบบจากเซสชัน DOS หรือ git bash บน Windows หากคุณโทรหาไฟล์ของคุณ%HOME%\_netrc(แทน~/.netrc) ดูที่stackoverflow.com/a/18362082/6309เพื่อเข้ารหัสไฟล์นั้น
VonC

1
สิ่งนี้ทำงานได้ดีใน Linux โดยเฉพาะการใช้ git ผ่าน VPN
Evan Hu

3
คุณไม่จำเป็นต้องใส่มันในข้อความที่ชัดเจนหรือเข้ารหัส ยูทิลิตี้ตัวช่วยจะแคชให้คุณและใช้เวลา 30 วินาทีในการตั้งค่า help.github.com/articles/caching-your-github-password-in-git/?hl=th
137717

86

สำหรับผู้ที่ไม่ได้ฝึกหัดที่สับสนกับคำตอบก่อนหน้านี้คุณสามารถทำได้:

git remote -v

ซึ่งจะตอบสนองด้วยสิ่งที่ชอบ

origin    https://yourname@github.com/yourname/yourrepo.git (fetch)
origin    https://yourname@github.com/yourname/yourrepo.git (push)

จากนั้นคุณสามารถเรียกใช้คำสั่งอื่น ๆ ที่แนะนำ แต่ตอนนี้คุณรู้จักชื่อและ yourrepo จากด้านบนดังนั้นคุณสามารถตัดและวางyourname/yourrepo.gitจากด้านบนลงใน:

git remote set-url origin git@github.com:yourname/yourrepo.git

1
ฉันลองสิ่งนี้ มันถามฉันparaphraseทุกครั้ง ฉันไม่ได้ตั้งค่า
samayo

สิ่งที่จะไปในสถานที่ของyourrepo?
Raphi

2
@Raphi ทำงานgit remote -vและดูสิ่งที่ออกมา
Davide

1
คำตอบอื่น ๆ ควรเสริมคำแนะนำนี้ไว้ก่อน
Bennett Brown

57

หากคุณกำลังใช้ SSH และคีย์ส่วนตัวของคุณจะถูกเข้ารหัสด้วยรหัสผ่านแล้วคุณจะยังคงต้องป้อนข้อความรหัสผ่าน / รหัสผ่านสำหรับคีย์ส่วนตัวเมื่อคุณทำดำเนินงานเครือข่ายกับ Gitเหมือนpush, และpullfetch

ใช้ ssh-agent เพื่อบันทึกไพรเวตคีย์รหัสผ่าน / หนังสือรับรองรหัสผ่าน

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

$ eval `ssh-agent -s`
$ ssh-add

ใน Windows msysgit Bash คุณต้องประเมินผลลัพธ์ของssh-agentแต่ฉันไม่แน่ใจว่าคุณต้องทำเช่นเดียวกันในสภาพแวดล้อมการพัฒนาและระบบปฏิบัติการอื่น ๆ หรือไม่

ssh-addค้นหาคีย์ส่วนตัวใน.sshโฟลเดอร์บ้านของคุณชื่อid_rsaซึ่งเป็นชื่อเริ่มต้น แต่คุณสามารถส่งไฟล์พา ธ ไปยังคีย์ด้วยชื่ออื่น

ฆ่าตัวแทน

เมื่อเสร็จสิ้นเซสชันเทอร์มินัลของคุณคุณสามารถปิดssh-agentด้วยการตั้งค่าสถานะฆ่า-k:

$ ssh-agent -k

ตามที่อธิบายไว้ในssh-agentคู่มือ :

-k

ฆ่าเอเจนต์ปัจจุบัน (กำหนดโดยตัวแปรสภาพแวดล้อม SSH_AGENT_PID)

หมดเวลาเสริม

นอกจากนี้ยังสามารถใช้พารามิเตอร์การหมดเวลาที่เป็นตัวเลือกเช่น:

$ ssh-add -t <timeout>

ที่<timeout>เป็นรูปแบบ<n>hสำหรับ<n>ชั่วโมง<n>mสำหรับ<n>นาทีและอื่น ๆ

ตามssh-agentคู่มือ :

-t life

ตั้งค่าเริ่มต้นสำหรับอายุการใช้งานสูงสุดของรหัสประจำตัวที่เพิ่มให้กับเอเจนต์ อายุการใช้งานอาจมีการระบุไว้ในวินาทีหรือในรูปแบบเวลาที่ระบุไว้ในsshd_config (5) อายุการใช้งานที่ระบุสำหรับข้อมูลเฉพาะตัวที่มีssh-add (1)จะแทนที่ค่านี้ หากไม่มีตัวเลือกนี้อายุการใช้งานสูงสุดเริ่มต้นจะคงอยู่ตลอดไป

ดูหน้านี้สำหรับรูปแบบที่มีเวลามากขึ้น

คำเตือนความปลอดภัยสำหรับผู้ใช้ Cygwin

ผู้ใช้ Cygwin ควรตระหนักถึงความเสี่ยงที่อาจเกิดขึ้นกับการใช้ ssh-agent ใน Cygwin :

ผู้คนควรตระหนักถึงอันตรายที่อาจเกิดขึ้นของ ssh-agent ภายใต้ Cygwin 1แม้ว่าจะอยู่ภายใต้ netstat ท้องถิ่นและ portscan ระยะไกลก็ไม่ปรากฏว่าพอร์ตที่ระบุใน / tmp / ssh-foo สามารถเข้าถึงได้กับทุกคน ... ?

[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html

และที่ลิงค์ที่อ้างถึง :

อย่างไรก็ตามโปรดทราบว่าซ็อกเก็ต Unix ของ Cygwin นั้นไม่ปลอดภัยเป็นอย่างยิ่งดังนั้นฉันจึงขอลดการใช้ ssh-agent ภายใต้ Cygwin อย่างมาก

เมื่อคุณเรียกใช้ ssh-agent ภายใต้ Cygwin มันจะสร้างซ็อกเก็ต AF_UNIX ใน/tmp/ssh-$USERNAME/ไดเรกทอรี ภายใต้ซ็อกเก็ต Cygwin AF_UNIX จะถูกจำลองผ่านซ็อกเก็ต AF_INET คุณสามารถเห็นได้อย่างง่ายดายว่าหากคุณดู/tmp/ssh-$USERNAME/agent-socket-*ไฟล์ผ่าน Notepad คุณจะเห็นสิ่งที่ชอบ

!<socket >2080

จากนั้นเรียกใช้netstat -aและแปลกใจ! คุณมีบางโปรแกรมที่ฟังพอร์ต 2080 เป็น ssh-agent เมื่อ ssh ได้รับการท้าทาย RSA จากเซิร์ฟเวอร์มันหมายถึงที่เกี่ยวข้อง/tmp/ssh-$USERNAME/agent-socket-*(ภายใต้ Cygwin ในกรณีของเรานั่นหมายความว่ามันจะเปิดการเชื่อมต่อไปยังlocalhost:2080) และขอให้ตัวแทน ssh ในการประมวลผลการท้าทาย RSA ด้วยรหัสส่วนตัวที่มีอยู่แล้ว มันเพียงผ่านการตอบสนองที่ได้รับจาก ssh-agent ไปยังเซิร์ฟเวอร์

ภายใต้ Unix สถานการณ์ดังกล่าวทำงานได้โดยไม่มีปัญหาเนื่องจากเคอร์เนล Unix ตรวจสอบสิทธิ์เมื่อโปรแกรมพยายามเข้าถึงซ็อกเก็ต AF_UNIX อย่างไรก็ตามสำหรับซ็อกเก็ต AF_INET การเชื่อมต่อจะไม่ระบุชื่อ (อ่าน "ไม่ปลอดภัย") ลองนึกภาพว่าคุณมี Cygwin ssh-agent กำลังทำงานอยู่ แฮกเกอร์ประสงค์ร้ายอาจสแกนกล่องของคุณค้นหาพอร์ตเปิดที่ใช้โดย ssh-agent เปิดการเชื่อมต่อไปยังเซิร์ฟเวอร์ SSH ของคุณรับการท้าทาย RSA จากนั้นส่งไปยัง ssh-agent ผ่านพอร์ตเปิดที่เขา / เธอพบได้รับ ตอบกลับ RSA ส่งไปยังเซิร์ฟเวอร์ SSH และ voila เขา / เธอประสบความสำเร็จในการเข้าสู่เซิร์ฟเวอร์ของคุณในขณะที่คุณ


ฟังดูดีและมีรายละเอียด ฉันดูแลผู้ช่วยข้อมูลรับรอง httpsและคุณดูแลการเชื่อมต่อ ssh! +1
VonC

49

ที่มา: ตั้งค่า Git

คำสั่งต่อไปนี้จะบันทึกรหัสผ่านของคุณในหน่วยความจำบางครั้ง (สำหรับGit 1.7.10หรือใหม่กว่า)

$ git config --global credential.helper cache
# Set git to use the credential memory cache

$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after one hour (setting is in seconds)

2
ฉันต้องการความช่วยเหลือข้อมูลรับรอง 'netrc' ( stackoverflow.com/a/18362082/6309 ) สำหรับการแคชข้อมูลประจำตัวหลายรายการ (โดยไม่ต้องจำรหัสผ่านทุกครั้ง) แต่ถ้าคุณใช้ Windows และต้องการใช้แคชหน่วยความจำคุณต้องมี winstore ( stackoverflow.com/a/15310274/6309 )
VonC

9
นี่คือคำตอบที่ดีที่สุดเท่าที่ IMHO
Chiel ten Brinke

35

เมื่อคุณใช้httpsสำหรับ Git pull & push เพียงกำหนดค่าremote.origin.urlโครงการของคุณเพื่อหลีกเลี่ยงชื่อผู้ใช้ (หรือ / และรหัสผ่าน) ทุกครั้งที่คุณกด

วิธีกำหนดค่าremote.origin.url:

รูปแบบ URL:
    https: // {ชื่อผู้ใช้: รหัสผ่าน @} {github.com/ เจ้าของ} / {} repo

พารามิเตอร์ใน URL:

* ชื่อผู้ใช้เป็น
ตัวเลือกชื่อผู้ใช้ที่จะใช้เมื่อจำเป็น
รับรองความถูกต้อง หากระบุไว้ไม่จำเป็นต้องป้อนชื่อผู้ใช้อีกครั้งเมื่อต้องการการตรวจสอบสิทธิ์ อย่าใช้อีเมล ใช้ชื่อผู้ใช้ของคุณที่ไม่มี "@" มิฉะนั้นจะไม่สามารถแยกวิเคราะห์ URL ได้อย่างถูกต้อง * รหัสผ่าน เป็นตัวเลือกรหัสผ่านที่จะใช้เมื่อต้องการการรับรองความถูกต้อง หากระบุไว้ไม่จำเป็นต้องป้อนรหัสผ่านอีกครั้งเมื่อต้องการการตรวจสอบสิทธิ์ เคล็ดลับ: ค่านี้ถูกเก็บไว้เป็นข้อความธรรมดาดังนั้นสำหรับข้อกังวลด้านความปลอดภัยอย่าระบุพารามิเตอร์นี้ * * * * เช่น git config remote.origin.url https: //eric@github.com/eric/myproject

@ อัปเดต - กำลังใช้ ssh

ฉันคิดว่าการใช้sshโปรโตคอลเป็นวิธีแก้ปัญหาที่ดีกว่าhttpsแม้ว่าขั้นตอนการตั้งค่าจะซับซ้อนกว่าเล็กน้อย

ขั้นตอนหยาบ:

  • สร้างคีย์ ssh โดยใช้คำสั่งเช่นssh-keygenบน Linux บน windows msysgitจัดเตรียมคำสั่งที่คล้ายกัน
  • ~/.sshเก็บคีย์ส่วนตัวในเครื่องท้องถิ่นในสถานที่ที่เหมาะสมเช่น และเพิ่มลงในตัวแทน ssh ผ่านssh-addคำสั่ง
  • อัพโหลดกุญแจสาธารณะไปยังเซิร์ฟเวอร์ Git
  • เปลี่ยนremote.origin.urlที่เก็บ Git เป็นsshสไตล์เช่นgit@gitlab.com:myaccount/myrepo.git
  • จากนั้นเมื่อดึงหรือดันไม่จำเป็นต้องป้อนชื่อผู้ใช้หรือรหัสผ่านอีกต่อไป

เคล็ดลับ:

  • หากคีย์ ssh ของคุณมีวลีรหัสผ่านคุณจะต้องป้อนรหัสในการใช้งานคีย์ครั้งแรกหลังจากการรีสตาร์ทเครื่องแต่ละครั้งโดยค่าเริ่มต้น

@Update - สลับระหว่างhttpsและsshโปรโตคอล

เพียงแค่เปลี่ยนremote.origin.urlจะเพียงพอหรือคุณสามารถแก้ไขrepo_home/.git/configได้โดยตรงเพื่อเปลี่ยนค่า (เช่นใช้viบน Linux)

#ฉันมักจะเพิ่มบรรทัดสำหรับแต่ละโปรโตคอลและแสดงความคิดเห็นออกมาหนึ่งของพวกเขาใช้

เช่น

[รีโมท "กำเนิด"]
        url = git@gitlab.com: myaccount / myrepo.git
        # url = https: //myaccount@gitlab.com/myaccount/myrepo.git
        fetch = + refs / heads / *: refs / remotes / origin / *

คุณแน่ใจหรือว่าhttp [s] -based URL สนับสนุนการขยายชื่อผู้ใช้ คู่มือgit-fetch(1)กล่าวถึงเฉพาะสำหรับgit/ ssh-based URL
วันที่

@plmday ใช่ฉันใช้แล้วเวอร์ชันคอมไพล์ของฉันคือ 1.8.2.3 และ 1.8.4 ฉันไม่แน่ใจว่า verion ที่สูงกว่าเปลี่ยนไปไหม
Eric Wang

1
NB ระบุรหัสผ่านของคุณใน URL (แม้เมื่อใช้ HTTPS) หมายความว่าทุกอย่างระหว่างคุณกับที่เก็บของคุณจะปรากฏให้เห็น
วิลเลียม

3
ไม่การระบุรหัสผ่านในhttps://username:password@github.com/นั้นปลอดภัย ดูstackoverflow.com/questions/4980912/…
slowhand

1
และนี่คือสิ่งที่ฉันกำลังมองหา (สำหรับระบบอัตโนมัติแบบสมบูรณ์)
Joshua

16

คุณสามารถแคชรหัสผ่าน GitHub ของคุณใน Git:

เพียงทำตามคำแนะนำจาก GitHub ของเอกสารที่เป็นทางการ

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


5
นี่เป็นคำตอบที่ดีที่สุดที่นี่และควรเป็น IMO ที่ยอมรับได้
TheZuck

1
เห็นด้วยคำตอบที่อ้างถึงเอกสารอย่างเป็นทางการควรมีความสำคัญ ฉันยินดีปฏิบัติตามคำแนะนำของพวกเขาและชอบใช้การประชุมมาตรฐาน
johnnieb

10

นี่คือตัวเลือกอื่น:

แทนที่จะเขียน

git push origin HEAD

คุณสามารถเขียน:

git push https://user:pass@yourrepo.com/path HEAD

เห็นได้ชัดว่าเชลล์ส่วนใหญ่จะส่งผลให้รหัสผ่านถูกเก็บไว้ในประวัติศาสตร์ดังนั้นโปรดจำไว้ว่า


1
ใน Bash การเพิ่มช่องว่างนำหน้าอย่างน้อยหนึ่งรายการมักจะทำให้มันไม่อยู่ในประวัติ แต่ไม่ได้อยู่ในGit ทุบตีแม้ว่า
Peter Mortensen

นี่ใช้งานได้กับฉัน :)
Naveen Kumar V

9

สิ่งที่ได้ผลสำหรับฉันคือการแก้ไข.git/configและใช้งาน

[remote "origin"]
        url = https://<login>:<password>@gitlab.com(...).git

มันไปโดยไม่บอกว่านี่เป็นวิธีที่ไม่ปลอดภัยในการจัดเก็บรหัสผ่านของคุณ แต่มีสภาพแวดล้อม / กรณีที่อาจไม่มีปัญหา


6

หากคีย์หรือ.netrcไฟล์SSH ไม่ได้ผลสำหรับคุณแสดงว่าโซลูชันที่เรียบง่าย แต่มีความปลอดภัยน้อยกว่าที่สามารถใช้ได้กับคุณคือgit-credential-store - ผู้ช่วยในการจัดเก็บข้อมูลรับรองบนดิสก์:

git config --global credential.helper store

~/.git-credentialsโดยค่าเริ่มต้นข้อมูลประจำตัวที่จะถูกบันทึกไว้ในแฟ้ม มันจะถูกสร้างและเขียนถึง

โปรดทราบว่าการใช้ตัวช่วยนี้จะจัดเก็บรหัสผ่านของคุณที่ไม่ได้เข้ารหัสบนดิสก์ได้รับการป้องกันโดยสิทธิ์ระบบไฟล์เท่านั้น หากนี่อาจไม่ใช่การแลกเปลี่ยนความปลอดภัยที่ยอมรับได้


5

ฉันมีปัญหาเดียวกัน

ดังนั้นฉันจึงเปลี่ยน.git/configไฟล์จากโครงการของฉัน

url = https://github.com/<your-user-here>/<your-repo-here>

ถึง

url = git@github.com:<your-user-here>/<your-repo-here>

และเพิ่มกุญแจสาธารณะ SSH ไปยังโปรไฟล์ Git ที่อยู่ในการตั้งค่า

สำหรับรหัสสาธารณะ SSH:

cat ~/.ssh/id_rsa.pub

1
ด้วยการcat ~/.ssh/id_rsa.pubรับคีย์ rsa และวางในการตั้งค่าเว็บพอร์ทัลคอมไพล์
Anupam Maurya

4

อัปเดตสำหรับ HTTPS:

GitHub ได้เปิดตัวโปรแกรมใหม่สำหรับ Windows ที่เก็บข้อมูลรับรองของคุณเมื่อคุณใช้ HTTPS:

ใช้:

  • ดาวน์โหลดโปรแกรมจากที่นี่

  • เมื่อคุณเรียกใช้โปรแกรมมันจะแก้ไข.gitconfigไฟล์ของคุณ ตรวจสอบอีกครั้งหากมีการแก้ไขที่ถูกต้อง.gitconfigในกรณีที่คุณมีหลายคน หากไม่ได้แก้ไขสิ่งที่ถูกต้องให้เพิ่มสิ่งต่อไปนี้ในของคุณ.gitconfig

    [credential]
        helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'
    

    [credential]หมายเหตุการแบ่งเส้นหลัง มันเป็นสิ่งจำเป็น

  • เปิดไคลเอนต์บรรทัดคำสั่งของคุณแล้วลองgit push origin masterอีกครั้ง หากมันถามรหัสผ่านให้คุณป้อนและคุณจะผ่าน บันทึกรหัสผ่านแล้ว!


ขอบคุณ Varun มีเสน่ห์ทำงาน!
Joyy

4

สำหรับผู้ใช้ Windows Git หลังจากใช้งานgit config --global credential.helper storeหากยังคงมีข้อความแจ้งเตือนเกี่ยวกับรหัสผ่านคุณควรตรวจสอบว่าไฟล์การกำหนดค่าถูกเขียนไปที่ใดโดยใช้คำสั่งนี้

git config --list --show-origin

ในกรณีของฉันหลังจากแก้ไขไฟล์กำหนดค่าด้วยตนเอง 'C: \ Program Files \ Git \ mingw64 \ etc \ gitconfig' และเพิ่มข้อความต่อไปนี้ก็ใช้งานได้

[credential]
    helper = store

3

โดยทั่วไปคุณมีสองตัวเลือก

หากคุณใช้ผู้ใช้เดียวกันกับทั้งสองเครื่องคุณจำเป็นต้องคัดลอกคีย์. pub ไปยังพีซีของคุณดังนั้น GitHub จึงรู้ว่าคุณเป็นผู้ใช้คนเดียวกัน

หากคุณสร้างไฟล์. pub ใหม่สำหรับพีซีของคุณและต้องการที่จะปฏิบัติต่อเครื่องในฐานะผู้ใช้ที่แตกต่างกันคุณจะต้องลงทะเบียนไฟล์. pub ใหม่บนเว็บไซต์ GitHub

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

ssh -vv username@github.com

เพื่อรับข้อมูลเพิ่มเติมทำไม SSH ล้มเหลว


3

อัปเดตไฟล์กำหนดค่า Git ของคุณโดยตรง ( หากคุณไม่ต้องการจดจำคำสั่งแฟนซี ):

เปิด.git/configไฟล์ของคุณในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ มันจะอยู่ในโฟลเดอร์ที่คุณโคลนหรือในพื้นที่เก็บข้อมูลที่คุณดำเนินการgit initไปที่ที่เก็บนั้น .gitเป็นโฟลเดอร์ที่ซ่อนอยู่และการกดCtrl+ Hควรแสดงโฟลเดอร์ที่ซ่อนอยู่ ( ls -aในเทอร์มินัล)

ด้านล่างนี้เป็นตัวอย่างของ.git/configไฟล์ คัดลอกและวางบรรทัดเหล่านี้และอย่าลืมอัปเดตบรรทัดเหล่านั้นด้วยข้อมูล Git ของคุณ

[user]
        name = Tux
        email = tux@gmail.com
        username = happy_feet

[remote "origin"]
        url = https://github.com/happy_feet/my_code.git
        fetch = +refs/heads/*:refs/remotes/origin/*

เปลี่ยนส่วน URL ด้วยรูปแบบต่อไปนี้สำหรับ SSH:

url = git@github.com:happy_feet/my_code.git

( รูปแบบข้างต้นจะไม่เปลี่ยนแปลงกับรีโมตเซิร์ฟเวอร์ Git ต่างๆเช่น GitHub หรือ Bitbucket ซึ่งจะเหมือนกันถ้าคุณใช้ Git สำหรับการควบคุมเวอร์ชัน ):

หมายเหตุ:วิธีการเชื่อมต่อ SSH กับที่เก็บ Git ระยะไกลคุณจะต้องเพิ่มกุญแจ SSH สาธารณะของคุณไปยังเซิร์ฟเวอร์ Git ระยะไกลของคุณ ( เช่น GitHub หรือ Bitbucket ค้นหาหน้าการตั้งค่าสำหรับคีย์ SSH )

หากต้องการทราบวิธีสร้างคีย์ SSH ของคุณอ้างอิงถึง: การสร้างคีย์ SSH


2

นี่คือสิ่งที่ได้ผลสำหรับฉัน:

git remote set-url origin https://username@github.com/username/reponame.git

ตัวอย่าง:

git remote set-url origin https://jsmith@github.com/jsmith/master.git

ขอบคุณฉัน upvote คำตอบของคุณ
Mandeep Singh

2

คุณต้องดำเนินการสองขั้นตอน -

  1. git remote remove origin
  2. git remote add origin git@github.com:NuggetAI/nugget.git

โปรดสังเกตว่า Git URL เป็น SSH URL และไม่ใช่ HTTPS URL ... ซึ่งคุณสามารถเลือกได้จากที่นี่:

ป้อนคำอธิบายภาพที่นี่


2

หากคุณได้ทำการโคลน HTTPS แทน SSH และประสบปัญหากับการดึงชื่อผู้ใช้และรหัสผ่านให้กดและดึง คุณสามารถแก้ปัญหานี้ได้เพียงแค่ UBUNTU

ขั้นตอนที่ 1: ย้ายไปยังไดเรกทอรีราก

cd ~/

สร้างไฟล์. git-credentials

เพิ่มเนื้อหานี้ไปยังไฟล์นั้นกับคุณusename passwordและgithosting URL

https://user:pass@example.com

จากนั้นดำเนินการคำสั่ง

git config --global credential.helper store

ตอนนี้คุณจะสามารถดึงและดึงรายละเอียดทั้งหมดจาก repo ของคุณได้โดยไม่ต้องยุ่งยาก


0

ถ้าคุณใช้ Git (ตัวอย่างเช่น Git Bash) ใน Windows (และถ้าคุณไม่ต้องการเปลี่ยนจาก HTTPS เป็น SSH) คุณสามารถใช้Git Credential Manager สำหรับ Windows

แอปพลิเคชันนี้จะเก็บชื่อผู้ใช้และรหัสผ่านให้คุณ ...


0

อย่างที่ผู้ใช้หลายคนบอกคุณต้องเปลี่ยน URL ที่เก็บ Git จาก HTTPS เป็น SSH

หากคุณยังไม่ได้สร้างคีย์ SSH ในเครื่องของคุณคุณก็จะต้องทำ

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

การอนุญาตถูกปฏิเสธ

ในกรณีของฉันปัญหาคือว่าฉันใช้ Windows Shell เพื่อรันคำสั่ง ngh; เนื่องจากคำสั่งนี้ควรเปิดพรอมต์เพื่อขอวลี SSH และ Windows Shell ไม่เปิดพรอมต์เหล่านี้การตรวจสอบจึงล้มเหลว

ดังนั้นฉันต้องเปิดเชลล์ Git และดำเนินการคำสั่ง ngh ที่นั่นใส่วลี SSH ในพรอมต์ทุกครั้งที่ถามและ "voilà" ... มันใช้งานได้ดี!


0
    # create the company identity file
    ssh-keygen -t rsa -b 4096 -C "first.last@corp.com"
    # save private key to ~/.ssh/id_rsa.corp, 
    cat ~/.ssh/id_rsa.corp.pub # copy paste this string into your corp web ui security ssh keys

    # create your private identify file
    ssh-keygen -t rsa -b 4096 -C "me@gmail.com"
    # save private key to ~/.ssh/id_rsa.me, note the public key ~/.ssh/id_rsa.me.pub
    cat ~/.ssh/id_rsa.me.pub # copy paste this one into your githubs, private keys

    # clone company internal repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@git.in.corp.com:corp/project.git

    export git_msg="my commit msg with my corporate identity"
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@corp.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push 

    # clone public repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@github.com:acoolprojectowner/coolproject.git

    export git_msg="my commit msg with my personal identity"
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@gmail.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.me -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push 

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