Escape @ character ในรหัสผ่าน git proxy


90

ฉันมี git proxy config เป็น 'http.proxy = http: // userId: pwd @ 123 @ipaddress: port' แต่ในขณะที่โคลนโปรเจ็กต์ระยะไกลฉันได้รับข้อผิดพลาดเนื่องจาก

Cloning into git...
error: Couldn't resolve proxy '123@ipaddress' while accessing http://git.kernel.org/pub/scm/git/git.git/info/refs

fatal: HTTP request failed

จะหนีอักขระ '@' ในรหัสผ่านได้อย่างไร?

โปรดทราบ: ฉันไม่สามารถเปลี่ยนรหัสผ่านได้

คำตอบ:


161

ฉันจะลองใช้ค่าที่เข้ารหัส URL ของสัญลักษณ์ @ ( %40) หากคุณกำลังส่งรหัสผ่านใน URL ของพร็อกซี:

http.proxy=http://userId:pwd%40123@ipaddress:port

3
ฉันพยายามทำเคล็ดลับเดียวกันนี้ แต่ด้วย 'git clone user: pwd% 40123 @ ip: port ' และไม่ได้ผล ดังนั้นฉันเดาว่า git ไม่ใช้ curl ในสถานการณ์นี้?
Joseph Garvin

น่าสนใจ ... ไม่แน่ใจ อาจคุ้มค่าที่จะลองดูว่าอะไรถูกส่งผ่านสายในกรณีนี้
John Weldon

1
สิ่งนี้ช่วยฉันได้ คุณควรเข้ารหัส url แยกทั้งส่วนชื่อและรหัสผ่าน วิธีนี้จะช่วยให้คุณหลีกเลี่ยงปัญหาเกี่ยวกับอักขระพิเศษ ตัวอย่างเช่นอาจมีเครื่องหมาย ":" ซึ่งจะทำให้เกิดปัญหาได้เช่นกัน
Stalinko

2
นอกจากนี้ยังยอดเยี่ยมเมื่อคุณมี "@" ในชื่อผู้ใช้เช่นเมื่อคุณมีที่อยู่อีเมลเป็นชื่อผู้ใช้
แรม

ขอบคุณมากสำหรับการแก้ปัญหาของฉันหลังจากต่อสู้มาสองวัน ... ยากมากที่จะหาสาเหตุของปัญหาประเภทนี้
lleiou

62

หมายเหตุ (พฤศจิกายน 2556)

การเข้ารหัส url (โดยเฉพาะอักขระพิเศษในรหัสผ่าน) เป็นวิธีการแก้ปัญหาที่เหมาะสม
ที่.netrcระบุด้านล่างนี้ใช้สำหรับ url repo ระยะไกลเท่านั้นไม่ใช่สำหรับพร็อกซีที่ใช้ในการแก้ไข url รีโมต repo ดังกล่าว

สำหรับการเข้ารหัสดังกล่าวโปรดดู " การเข้ารหัสเปอร์เซ็นต์ ":

การเข้ารหัสเปอร์เซ็นต์หรือที่เรียกว่าการเข้ารหัส URL เป็นกลไกในการเข้ารหัสข้อมูลในUniform Resource Identifier (URI) ภายใต้สถานการณ์บางอย่าง แม้ว่าจะเรียกว่าการเข้ารหัส URL แต่ในความเป็นจริงแล้วจะใช้โดยทั่วไปมากกว่าภายในชุด Uniform Resource Identifier (URI) หลักซึ่งรวมถึงUniform Resource Locator (URL) และUniform Resource Name (URN) ดังนั้นจึงยังใช้ในการจัดเตรียมข้อมูลของประเภทสื่อ / x-www-form-urlencoded ของแอปพลิเคชันซึ่งมักใช้ในการส่งข้อมูลรูปแบบHTML ในคำขอHTTP

อักขระที่สงวนไว้หลังจากการเข้ารหัสเปอร์เซ็นต์:

!   #   $    &   '   (   )   *   +   ,   /   :   ;   =   ?   @   [   ]
%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D

คำตอบเดิม (พฤษภาคม 2554)

สองความคิดเห็น:

  • การมีรหัสผ่านสำหรับเซิร์ฟเวอร์ที่เข้าถึงด้วย http (ไม่ใช่ https) นั้น ... แปลก รหัสผ่านไม่ได้เข้ารหัสระหว่างการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์

  • คุณสามารถตั้งค่า.netrc(หรือ_netrcสำหรับ Windows) ใน$HOMEเนื้อหาต่อไปนี้

    ที่อยู่ IP ของเครื่อง: พอร์ต
    userId เข้าสู่ระบบ
    รหัสผ่าน pwd @

ขดที่ใช้โดย Git bbehind ฉากที่จะจัดการการเข้ารหัสเพียงแค่ปรับหรือไม่@@


ขอบคุณสำหรับคำตอบ เซิร์ฟเวอร์เป็นไดรฟ์เครือข่ายที่มีเพียงตัวฉันเองและนักพัฒนาอีก 2 คนเท่านั้นที่จะใช้ ดังนั้นฉันคิดว่าไม่จำเป็นต้องมีการเข้ารหัส และฉันจะลองใช้ netrc บ้าง
Karthik

@Karthik: ที่จะช่วยให้คุณใช้: http://123@ipaddress:port/...เป็นที่อยู่โคลนโดยไม่ต้องเพิ่มข้อมูลผู้ใช้และรหัสผ่าน
VonC

8

URL เข้ารหัสอักขระที่ผิดปกติ

รายการรหัส URL

@ character is %40

ในไฟล์กำหนดค่า git ของฉันฉันได้เข้ารหัส 'just' ชื่อผู้ใช้เช่น:

https://myemail%40gmail.com@myrepo.org/api.git


5

ตัวอย่างเช่นรหัสผ่านของคุณเก็บไว้ในตัวแปรสภาพแวดล้อมGIT_PASSWORDชื่อผู้ใช้ - GIT_USERNAMEแล้ว:

git clone http://${GIT_USERNAME}:$(echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %)@repository.git

คำอธิบายของ: echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. พิมพ์รหัสผ่าน: $GIT_PASSWORD<-hello
  2. แปลง 'hello' เป็น hex: hello<-x68x65x6Cx6Cx6F
  3. เปลี่ยน 'x' เป็น '%': x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F

ในจุดแรกของคำอธิบายคุณหมายถึงใช้ $ GIT_ PASSWORDแทน $ GIT_REPOSITORY ใช่หรือไม่
Ninju Bohra

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