gitプロキシパスワードの@文字をエスケープする


90

git proxy config as'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

パスワードの「@」文字をエスケープするにはどうすればよいですか?

Pls注:パスワードを変更できません。

回答:


161

%40プロキシURLでパスワードを渡す場合は、@記号()のURLエンコード値を使用してみます。

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

3
私はこれと同じトリックを行おうとしていますが、「git clone user:pwd%40123 @ ip:port」を使用すると機能しません。だから私はgitがこの状況でcurlを使用しないと思いますか?
ジョセフガービン2012

おもしろい...わからない。この場合、実際にネットワークを介して何が送信されるかを確認することはおそらく価値があります。
ジョンウェルドン

1
これは私を助けました。名前とパスワードの両方の部分を個別にURLエンコードする必要があります。これは、特別な文字に関する問題を回避するのに役立ちます。たとえば、「:」記号があり、これも問題につながる可能性があります。
スタリンコ2016年

2
これは、ユーザー名に「@」が含まれている場合、たとえばユーザー名としてメールアドレスがある場合にも最適です。
ramdesh 2016

2日間の苦労の末、私の問題を解決してくれてありがとう...この種の問題の理由を見つけるのは本当に難しいです。
lleiou 2018

62

注(2013年11月)

URL(特にパスワードの特殊文字)をエンコードすることが正しい解決策です。
以下に.netrc記載されているのは、リモートリポジトリURLのみであり、リモートリポジトリURLの解決に使用されるプロキシではありません。

上記のエンコーディングについては、「パーセントエンコーディング」を参照してください。

また、URLのように知られているパーセント符号化、符号化は、内の情報を符号化するための機構であるユニフォームリソース識別子特定の状況下(URI)。これはURLエンコードとして知られていますが、実際には、メインのURI(Uniform Resource Identifier)セット内でより一般的に使用されます。これには、Uniform Resource Locator(URL)とUniform Resource Name(URN)の両方が含まれます。そのため、HTTPリクエストでのHTMLフォームデータの送信でよく使用されるように、application / x-www-form-urlencodedメディアタイプのデータの準備にも使用されます。

パーセントエンコード後の予約文字:

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

元の回答(2011年5月)

2つのコメント:

  • http(httpsではなく)でアクセスされるサーバーのパスワードを持っているのは...奇妙です。クライアントとサーバー間の通信中にパスワードは暗号化されません。

  • 次のコンテンツを使用して、で.netrc(または_netrcWindowsの場合)をセットアップできます。$HOME

    マシンのIPアドレス:ポート
    ログインuserId
    パスワードpwd @

シーンでGitbbehindが使用するカールは、エンコーディングを適切に処理する@か、または処理しません@


回答ありがとうございます。サーバーは、私と他の2人の開発者だけが使用するネットワークドライブでした。ですから、暗号化の必要はないと思います。そして、いつかnetrcを使ってみます。
Karthik

@Karthik:これによりhttp://123@ipaddress:port/...、ユーザーとパスワードの情報を追加することなく、クローンアドレスとして:を簡単に使用できるようになります。
vonC 2011年


5

たとえば、環境変数GIT_PASSWORDに保存されているパスワード、username- 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'を16進数に変換します:hello<-x68x65x6Cx6Cx6F
  3. 各「x」を「%」に変更します:x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F

説明の最初のポイントでは、$ GIT_の使用することを意味したPASSWORDを代わりに$ GIT_REPOSITORYの?
NinjuBohra20年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.