Втеча @ символу в паролі git-проксі


89

У мене є налаштування git proxy як '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

Як уникнути символу '@' у паролі?

Зверніть увагу: я не можу змінити пароль.

Відповіді:


158

Я спробував би використати закодоване значення символу @ (( %40), якщо ви передаєте пароль в URL-адресі проксі:

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

3
Я намагаюся зробити той самий трюк, але з 'git clone user: pwd% 40123 @ ip: port ', і це не працює. Тож я думаю, git не використовує curl у цій ситуації?
Джозеф Гарвін,

цікаво ... не впевнений. Напевно, варто спробувати побачити, що насправді в цьому випадку надсилається по дроту.
Джон Велдон,

1
Це мені допомогло. Вам слід окремо закодувати url як частини імені, так і пароля. Це допоможе вам уникнути будь-яких проблем зі спеціальними символами. Наприклад, може бути знак ":", що також призведе до проблем.
Сталінко

2
Це також чудово для того, коли в імені користувача є "@", наприклад, коли у вас є імена електронної пошти.
ramdesh

Щиро дякую, що вирішили мою проблему після дводенної боротьби ... дуже важко знайти причину такої проблеми.
lleiou

61

Примітка (листопад 2013 р.)

Кодування URL-адреси (особливо будь-якого спеціального символу в паролі) є правильним рішенням. Згадано нижче тільки для URL віддаленого репо, а не для проксі використовується для дозволу сказав URL віддаленого репо.
.netrc

Згадане кодування див. У " Відсоткове кодування ":

Кодування відсотків, також відоме як кодування URL-адреси , є механізмом кодування інформації в єдиному ідентифікаторі ресурсу (URI) за певних обставин. Хоча воно відоме як кодування URL-адреси, насправді воно використовується більш загально в межах основного набору уніфікованих ідентифікаторів ресурсів (URI), який включає як уніфікований локатор ресурсів (URL), так і уніфіковану назву ресурсу (URN). Як такий, він також використовується при підготовці даних типу додатка / x-www-form-urlencoded media , як це часто використовується при поданні даних форми HTML у запитах HTTP .

Зарезервовані символи після відсоткового кодування:

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

Оригінальна відповідь (травень 2011 р.)

Два коментарі:

  • наявність пароля для сервера, до якого здійснюється доступ через http (а не https), це ... дивно. Пароль не шифрується під час спілкування між клієнтом та сервером;

  • Ви можете встановити .netrc(або _netrcдля Windows) у своєму $HOME, з наступним вмістом

    ipaddress машини: порт
    Логін userId
    пароль pwd @

Завиток, який використовує Git bbehind the scene, впорався б з кодуванням просто чудово, @або ні @.


Дякую за відповіді. Сервером був мережевий диск, де використовуватимуть лише я та інші 2 розробники. Тому я думаю, що немає необхідності в шифруванні. І я спробую якось використати netrc.
Картік

@Karthik: це дозволить вам просто використовувати: http://123@ipaddress:port/...як адресу для клонування, не додаючи інформацію про користувача та пароль.
VonC

8

URL кодує будь-які незвичні символи.

Список url-кодів.

@ character is %40

У своєму конфігураційному файлі git я закодував "просто" ім'я користувача, наприклад:

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_REPOSITORY<-hello
  2. Перетворити "привіт" у шістнадцятковий: hello<-x68x65x6Cx6Cx6F
  3. Змініть кожен 'x' на '%': x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.