Escape @ character dalam sandi proxy git

90

Saya memiliki konfigurasi git proxy sebagai 'http.proxy = http: // userId: pwd @ 123 @ipaddress: port' tetapi saat mengkloning proyek jarak jauh, saya mendapatkan kesalahan seperti

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

Bagaimana cara keluar dari karakter '@' dalam kata sandi?

Harap diperhatikan: Saya tidak dapat mengubah kata sandi.

Karthik
sumber

Jawaban:

161

Saya akan mencoba menggunakan nilai Encoded URL dari simbol @ ( %40) jika Anda meneruskan sandi di url proxy:

http.proxy=http://userId:pwd%40123@ipaddress:port
John Weldon
sumber
3
Saya mencoba melakukan trik yang sama tetapi dengan 'git clone user: pwd% 40123 @ ip: port ' dan itu tidak berhasil. Jadi saya kira git tidak menggunakan curl dalam situasi ini?
Joseph Garvin
menarik ... tidak yakin. Mungkin ada baiknya mencoba melihat apa yang sebenarnya dikirim melalui kawat dalam kasus ini.
John Weldon
1
Ini membantu saya. Anda harus secara terpisah menyandikan url bagian nama dan kata sandi. Ini akan membantu Anda menghindari masalah dengan karakter khusus. Misalnya bisa ada tanda ":" yang juga akan menimbulkan masalah.
Stalinko
2
Ini juga luar biasa ketika Anda memiliki '@' di nama pengguna misalnya ketika Anda memiliki alamat email sebagai nama pengguna.
ramdesh
Terima kasih banyak telah menyelesaikan masalah saya setelah perjuangan dua hari ... sangat sulit untuk menemukan alasan masalah semacam ini.
lleiou
62

Catatan (November 2013)

Encoding url (terutama karakter khusus dalam password) adalah solusi yang tepat.
Yang .netrcdisebutkan di bawah ini hanya untuk url repo jarak jauh, bukan untuk proxy yang digunakan untuk menyelesaikan url repo jarak jauh tersebut.

Untuk encoding tersebut, lihat " Percent-encoding ":

Enkode persen, juga dikenal sebagai enkode URL , adalah mekanisme untuk menyandikan informasi dalam Uniform Resource Identifier (URI) dalam keadaan tertentu. Meskipun dikenal sebagai pengkodean URL, pada kenyataannya, digunakan lebih umum dalam set Uniform Resource Identifier (URI) utama, yang mencakup Uniform Resource Locator (URL) dan Uniform Resource Name (URN). Dengan demikian, juga digunakan dalam penyusunan data aplikasi / x-www-form-urlencoded jenis media , seperti yang sering digunakan dalam pengajuan HTML bentuk data dalam HTTP permintaan.

Karakter yang dicadangkan setelah encoding persen:

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

Jawaban asli (Mei 2011)

Dua komentar:

  • memiliki kata sandi untuk server yang diakses dengan http (bukan https) adalah ... aneh. Kata sandi tidak dienkripsi selama komunikasi antara klien dan server;

  • Anda dapat mengatur .netrc(atau _netrcuntuk Windows) di Anda $HOME, dengan konten berikut

    mesin ipaddress: port
    login userId
    sandi pwd @

Curl yang digunakan oleh Git di belakang layar akan menangani pengkodean dengan baik, @atau tidak @.

VonC
sumber
Terima kasih atas jawaban Anda. Server adalah drive jaringan di mana hanya saya dan 2 pengembang lainnya yang akan menggunakannya. Jadi menurut saya enkripsi tidak perlu. Dan saya akan mencoba menggunakan netrc kapan-kapan.
Karthik
@Karthik: yang memungkinkan Anda untuk menggunakan: http://123@ipaddress:port/...sebagai alamat kloning, tanpa harus menambahkan informasi pengguna dan kata sandi.
VonC
8

URL menyandikan karakter yang tidak biasa.

Daftar kode url.

@ character is %40

Di file konfigurasi git saya, saya telah menyandikan 'hanya' nama pengguna misalnya:

https://myemail%[email protected]/api.git

conal_lab24
sumber
5

Misalnya sandi Anda disimpan di variabel lingkungan GIT_PASSWORD, nama pengguna - GIT_USERNAME, lalu:

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

Penjelasan tentang: echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. Kata sandi cetak: $GIT_PASSWORD<-hello
  2. Ubah 'halo' menjadi hex: hello<-x68x65x6Cx6Cx6F
  3. Ubah setiap 'x' menjadi '%': x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F
isnullxbh
sumber
Pada poin pertama penjelasan, apakah Anda bermaksud menggunakan $ GIT_ PASSWORD alih-alih $ GIT_REPOSITORY?
Ninju Bohra