Git - วิธีใช้ไฟล์. netrc บน Windows เพื่อบันทึกผู้ใช้และรหัสผ่าน


172

เป็นไปได้ไหมที่จะใช้ไฟล์. netrc บน Windows เมื่อฉันใช้ Git เพื่อโคลนที่เก็บข้อมูลระยะไกลด้วย HTTP และรหัสผ่านผู้ใช้?

คำตอบ:


203

เป็นไปได้หรือไม่ที่จะใช้.netrcไฟล์บน Windows

ใช่: คุณต้อง:

  • กำหนดตัวแปรสภาพแวดล้อม%HOME%(pre-Git 2.0 ไม่จำเป็นต้องใช้กับ Git 2.0+ อีกต่อไป)
  • ใส่_netrcไฟล์ใน%HOME%

หากคุณใช้ Windows 7/10 ในCMDเซสชันให้พิมพ์:

setx HOME %USERPROFILE%

และ%HOME%จะถูกตั้งค่าเป็น ' C:\Users\"username"'
ไปที่โฟลเดอร์นั้น ( cd %HOME%) แล้วสร้างไฟล์ชื่อ ' _netrc'

หมายเหตุ: อีกครั้งสำหรับ Windows คุณต้องมี ' _netrc' ไฟล์ไม่ว่า ' .netrc' ไฟล์

เนื้อหามันค่อนข้างมาตรฐาน (แทนที่<examples>ด้วยค่าของคุณ):

machine <hostname1>
login <login1>
password <password1>
machine <hostname2>
login <login2>
password <password2>

ลุคกล่าวถึงในความคิดเห็น:

การใช้ msysgit เวอร์ชันล่าสุดบน Windows 7 ฉันไม่จำเป็นต้องตั้งค่าHOMEตัวแปรสภาพแวดล้อม _netrcไฟล์เพียงอย่างเดียวไม่หลอกลวง

นี่คือสิ่งที่ฉันพูดถึงใน " กำลังพยายาม" install"github .sshไม่ได้อยู่ที่นั่น ":
git-cmd.batรวมอยู่ใน msysgit จะตั้งค่า%HOME%ตัวแปรสภาพแวดล้อม:

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%

爱国者เชื่อในความคิดเห็นที่ว่า "ดูเหมือนว่าจะไม่ทำงานสำหรับโปรโตคอล HTTP"

อย่างไรก็ตามฉันตอบว่าnetrcถูกใช้โดยcurlและทำงานกับโปรโตคอล HTTP ดังที่แสดงในตัวอย่างนี้ (มองหา ' netrc' ในหน้า): ใช้กับโปรโตคอล HTTP ที่นี่: " _netrc/ .netrcทางเลือกcURL "


กับดักทั่วไปที่มีnetrcการสนับสนุนบน Windows นั้นคอมไพล์จะข้ามการใช้งานหาก url https ต้นทางระบุชื่อผู้ใช้

ตัวอย่างเช่นหาก.git/configไฟล์ของคุณมี:

[รีโมท "กำเนิด"]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https: //bob@code.google.com/p/my-project/

Git จะไม่แก้ไขข้อมูลประจำตัวของคุณผ่าน_netrcเพื่อแก้ไขการลบชื่อผู้ใช้ของคุณเช่น:

[รีโมท "กำเนิด"]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https://code.google.com/p/my-project/

วิธีการแก้ปัญหาทางเลือก: ด้วยรุ่นคอมไพล์ 1.7.9+ (มกราคม 2012): คำตอบนี้จากมาร์ค Longairรายละเอียดของกลไกการแคชข้อมูลประจำตัวที่ยังช่วยให้คุณไม่ได้เก็บรหัสผ่านของคุณในข้อความธรรมดาที่แสดงด้านล่าง


ด้วยGit 1.8.3 (เมษายน 2013):

ตอนนี้คุณสามารถใช้. netrc ที่เข้ารหัสได้ (พร้อมgpg)
บน Windows: %HOME%/_netrc( _ไม่ใช่ ' .')

มีการเพิ่มตัวช่วยข้อมูลรับรองแบบอ่านอย่างเดียว (เป็นcontrib/) เพื่อโต้ตอบกับ.netrc/.authinfoไฟล์

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

ไฟล์ที่มี.gpgนามสกุลจะถูกถอดรหัสโดย GPG ก่อนที่จะแยกวิเคราะห์ ข้อโต้แย้ง
หลาย-fข้อตกลง รายการเหล่านี้จะได้รับการดำเนินการตามลำดับและรายการแรกที่พบที่ตรงกันจะถูกส่งคืนผ่านโปรโตคอลตัวช่วยข้อมูลรับรอง

เมื่อไม่มี-fตัวเลือกที่จะได้รับ.authinfo.gpg, .netrc.gpg, .authinfoและ.netrcไฟล์ในไดเรกทอรีบ้านของคุณที่ใช้ในการสั่งซื้อนี้

วิธีเปิดใช้งานตัวช่วยข้อมูลรับรองนี้:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'

(โปรดทราบว่า Git จะเติมgit-credential-ชื่อผู้ช่วยเหลือ "" ไว้ล่วงหน้าแล้วมองหามันในเส้นทาง)

# and if you want lots of debugging info:
git config credential.helper '$shortname -f AUTHFILE -d'

#or to see the files opened and data found:
git config credential.helper '$shortname -f AUTHFILE -v'

ดูตัวอย่างเต็มรูปแบบได้ที่ " มีวิธีข้ามรหัสผ่านพิมพ์เมื่อใช้https:// github "


ด้วย Git 2.18+ (มิถุนายน 2018) ตอนนี้คุณสามารถปรับแต่งโปรแกรม GPG ที่ใช้ในการถอดรหัส.netrcไฟล์ที่เข้ารหัส

ดูกระทำ 786ef50 , กระทำ f07eeed (12 พฤษภาคม 2018) โดยหลุยส์ Marsano ( ``)
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 017b7c5 , 30 พฤษภาคม 2018)

git-credential-netrc: ยอมรับgpgตัวเลือก

git-credential-netrcถูก hardcoded เพื่อถอดรหัสด้วย ' gpg' โดยไม่คำนึงถึงตัวเลือก gpg.program
นี่เป็นปัญหาของการแจกแจงอย่าง Debian ที่เรียก GnuPG ที่ทันสมัยอย่างอื่นเช่น ' gpg2'


@Bernd: HOMEตัวแปรสภาพแวดล้อมมีความสำคัญเนื่องจากไม่ได้กำหนดไว้ตามค่าเริ่มต้นใน Windows คุณสามารถตั้งค่าตัวแปรนั้นเป็นไดเรกทอรีใดก็ได้ที่คุณต้องการ (ไม่ต้องเป็นC:\users\mylogin): ตัวอย่างเช่นที่ทำงานฉันตั้งค่าเป็นดิสก์ระยะไกลส่วนตัวที่เชื่อมโยงกับบัญชี Windows ของฉันซึ่งช่วยให้ฉันสามารถสลับเดสก์ท็อปโดยไม่ต้องสูญเสีย ของฉัน.sshหรือ_netrcการตั้งค่า
VonC

@Bernd: ตรวจสอบด้วยว่า repo Git ของคุณอยู่บนเซิร์ฟเวอร์ LAN หรือ WAN (อินเทอร์เน็ต) คุณอาจต้องกำหนดhttp.proxyตัวแปรสภาพแวดล้อมของคุณ หรือตรงกันข้ามเพื่อเพิ่มเซิร์ฟเวอร์ของคุณไปยังno_proxyตัวแปรเพื่อหลีกเลี่ยงการพยายามเข้าถึงเซิร์ฟเวอร์ LAN ผ่าน WAN
VonC

ชื่อและค่าของตัวแปรสภาพแวดล้อมคืออะไร? คุณอาจจะเป็นเพียงเล็กน้อยเฉพาะเจาะจงมากขึ้น VonC
เดนนิส D

@DennisD: ตัวแปรสภาพแวดล้อมทั้งสองที่ฉันพูดถึงในคำตอบและในความคิดเห็นคือ HOME และ http_proxy HOME จะอ้างอิงไดเรกทอรีใด ๆ ที่คุณต้องการ http_proxy จะอ้างอิงที่อยู่พร็อกซีถ้าคุณมี
VonC

msysgitเมื่อใช้ Windows 7 เวอร์ชันล่าสุดฉันไม่จำเป็นต้องตั้งค่าHOMEตัวแปรสภาพแวดล้อม _netrcไฟล์เพียงอย่างเดียวไม่หลอกลวง
ลูกา

35

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


8
คำตอบที่ยอดเยี่ยมนี่เป็นคำตอบเดียวที่ฉันพบที่ให้ฉันรักษาความเรียบง่ายของชื่อผู้ใช้ / รหัสผ่าน (ปลอดภัย) โดยไม่ต้องจัดการกับอึ SSH ทั้งหมด
Kirk Woll

@KirkWoll ดูคำตอบการอัปเดตของฉันด้านบน: ตอนนี้คุณสามารถจัดเก็บข้อมูลประจำตัวของคุณใน.netrcไฟล์ที่เข้ารหัส คุณจะไม่ต้องป้อนข้อมูลรับรองเหล่านั้นแม้แต่ครั้งเดียวในระหว่างเซสชัน
VonC

11

สิ่งนี้จะทำให้ Git รับรองความถูกต้องบน HTTPS โดยใช้.netrc:

  • ไฟล์ควรตั้งชื่อและตั้งอยู่ใน_netrcc:\Users\<username>
  • คุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อมที่เรียกว่าHOME=%USERPROFILE%(ตั้งค่าตัวแปรสภาพแวดล้อมทั่วทั้งระบบโดยใช้ตัวเลือก System ในแผงควบคุมทั้งนี้ขึ้นอยู่กับเวอร์ชั่นของ Windows คุณอาจต้องเลือก "Advanced Options"
  • รหัสผ่านที่เก็บไว้ใน_netrcไฟล์ต้องไม่มีช่องว่าง (การอ้างอิงรหัสผ่านจะไม่ทำงาน)

ทางออกที่ง่ายและดีที่สุด ทำงานอย่างมีเสน่ห์ด้วย Android Studio, Source Tree และบรรทัดคำสั่ง Git ฉันต้องใช้สิ่งนี้เมื่อ Google แนะนำ Cloud SDK หนังสือรับรองตัวเลือกผู้ช่วยเหลือล้มเหลวและต้องสร้างข้อมูลประจำตัวด้วยตนเองและใช้กับไฟล์ net rc ในกรณีของฉันฉันไม่จำเป็นต้องมีตัวเลือกที่ 2 และ 3
Hari

1

ฉันกำลังโพสต์วิธีใช้_netrcในการดาวน์โหลดเอกสารจากเว็บไซต์ www.course.com

หากมีใครบางคนกำลังใช้ coursera-dl เพื่อดาวน์โหลดวัสดุแบบเปิดใน www.coursera.com และใน Windows OS มีคนต้องการใช้ไฟล์เช่น ".netrc" ซึ่งอยู่ใน like-Unix OS เพื่อเพิ่ม ตัวเลือก-nแทน-U <username> -P <password>เพื่อความสะดวก เขา / เธอสามารถทำสิ่งนี้ได้:

  1. ตรวจสอบเส้นทางบ้านบน Windows OS: setx HOME %USERPROFILE%(ดูคำตอบของ VonC ) มันจะบันทึกตัวแปรสภาพแวดล้อมเป็นHOMEC:\Users\"username"

  2. ค้นหาลงในไดเรกทอรีและสร้างชื่อไฟล์C:\Users\"username" หมายเหตุ: ไม่มีคำต่อท้ายใด ๆ เนื้อหาเหมือน:_netrcmachine coursera-dl login <user> password <pass>

  3. ใช้คำสั่งที่ต้องการcoursera-dl -n --path PATH <course name>ดาวน์โหลดสื่อการเรียน รายละเอียดตัวเลือกเพิ่มเติมสำหรับ coursera-dl สำหรับหน้านี้

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