Escape @ в пароле прокси-сервера git

89

У меня есть конфигурация прокси-сервера git как 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

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

http.proxy=http://userId:pwd%40123@ipaddress:port
Джон Велдон
источник
3
Я пытаюсь проделать тот же трюк, но с «git clone user: pwd% 40123 @ ip: port », и это не работает. Полагаю, git не использует завиток в этой ситуации?
Джозеф Гарвин,
интересно ... не уверен. Вероятно, стоит попробовать посмотреть, что на самом деле отправляется по сети в этом случае.
Джон Велдон,
1
Это мне помогло. Вы должны отдельно url-кодировать части имени и пароля. Это поможет вам избежать проблем со спецсимволами. Например, может быть знак «:», который также приведет к проблемам.
Сталинко
2
Это также замечательно, когда у вас есть '@' в имени пользователя, например, когда у вас есть адреса электронной почты в качестве имен пользователей.
ramdesh
Большое вам спасибо за решение моей проблемы после двух дней борьбы ... действительно трудно найти причину такого рода проблем.
lleiou 01
61

Примечание (ноябрь 2013 г.)

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

Информацию о указанной кодировке см. В разделе « Процентное кодирование »:

Процентное кодирование, также известное как кодирование URL-адресов , - это механизм кодирования информации в унифицированном идентификаторе ресурса (URI) при определенных обстоятельствах. Хотя это называется кодировкой URL, на самом деле она используется в более общем плане в основном наборе универсальных идентификаторов ресурсов (URI), который включает как универсальный указатель ресурса (URL), так и универсальное имя ресурса (URN). Как таковой, он также используется при подготовке данных медиа-типа application / x-www-form-urlencoded , как это часто бывает при отправке данных 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 @

Curl, используемый Git b за сценой, справился бы с кодировкой нормально, @или нет @.

VonC
источник
Спасибо за твои ответы. Сервер был сетевым диском, который буду использовать только я и 2 других разработчика. Так что, думаю, в шифровании нет необходимости. И я когда-нибудь попробую использовать netrc.
Картик
@Karthik: это позволит вам просто использовать: http://123@ipaddress:port/...в качестве адреса для клонирования без необходимости добавлять информацию о пользователе и пароле.
VonC
8

URL кодирует любые необычные символы.

Список кодов URL.

@ character is %40

Например, в моем конфигурационном файле git я закодировал «просто» имя пользователя:

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

conal_lab24
источник
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
isnullxbh
источник
2

Надо проц-кодировать | закодируйте специальные символы. Например, вместо этого:

http://foo:B@r@http-gateway.domain.org:80

вы пишете это:

http://foo:B%40r@http-gateway.domain.org:80

Так @заменяется на %40.

Рави Парех
источник