1113

次のようなHTTPSリクエストにユーザー名とパスワードを提供する方法を知っています。

git clone https://username:password@remote

しかし、私はこのようにリモートにユーザー名とパスワードを提供する方法を知りたいです:

git clone git@remote.git

私はこのように試しました:

git clone username:password@git@remote.git
git clone git@username:password@remote.git
git clone git@remote.git@username:password

しかし、彼らは働いていません。

4

12 に答える 12

1697

Michael Scharfのコメントに基づく:

パスワードを省略して、Bash履歴ファイルに記録されないようにすることができます。

git clone https://username@github.com/username/repository.git

パスワードの入力を求められます。

または、次を使用することもできます。

git clone https://username:password@github.com/username/repository.git

この方法は、GitHubリポジトリから私のために機能しました。

于 2012-04-07T12:25:00.737 に答える
249

このuser@host:path/to/repoフォーマットは、sshを使用しhostてユーザー名でログインするようにGitに指示しますuser。差出人git help clone

代替のscpのような構文をsshプロトコルで使用することもできます。

[user@]host.xz:path/to/repo.git/

の前の部分@はユーザー名であり、認証方法(パスワード、公開鍵など)はGitではなくsshによって決定されます。リモートサーバーの構成によってはsshがパスワードを使用しない場合があるため、Gitにはパスワードをsshに渡す方法がありません。

ssh-agent常にパスワードを入力しないようにするために使用します

sshパスワードを常に入力したくない場合、一般的な解決策は、公開鍵と秘密鍵のペアを生成し、公開鍵をリモートサーバー上の~/.ssh/authorized_keysファイルに入れて、秘密鍵をにロードすることssh-agentです。一度ログインするためのGitoverSSHの構成、 sshキーパスフレーズに関するGitHubのヘルプページgitoliteのsshドキュメント、およびHerokuのsshキードキュメントも参照してください。

GitHub(またはHerokuまたは...)で複数のアカウントから選択する

GitHubやHerokuのような場所に複数のアカウントがある場合は、複数のsshキーがあります(アカウントごとに少なくとも1つ)。ログインするアカウントを選択するには、使用する秘密鍵をsshに指示する必要があります。

たとえば、2つのGitHubアカウントがあるとします: foobar。のsshキーfooはで~/.ssh/foo_github_idあり、のsshキーはbarです~/.ssh/bar_github_id。あなたはあなたのアカウントとあなたgit@github.com:foo/foo.gitのアカウントでアクセスしたいです。あなたはあなたのに以下を追加するでしょう:foogit@github.com:bar/bar.gitbar~/.ssh/config

Host gh-foo
    Hostname github.com
    User git
    IdentityFile ~/.ssh/foo_github_id
Host gh-bar
    Hostname github.com
    User git
    IdentityFile ~/.ssh/bar_github_id

次に、次のように2つのリポジトリのクローンを作成します。

git clone gh-foo:foo/foo.git  # logs in with account foo
git clone gh-bar:bar/bar.git  # logs in with account bar

sshを完全に回避する

一部のサービスは、sshの代わりにHTTPアクセスを提供します。

  • GitHub:

    https://username:password@github.com/username/repository.git
    
  • Gitorious:

    https://username:password@gitorious.org/project/repository.git
    
  • Heroku:このサポート記事を参照してください。

警告:クローンURLにパスワードを追加すると、Gitはプレーンテキストのパスワードをに保存します.git/config。HTTPを使用するときにパスワードを安全に保存するには、資格情報ヘルパーを使用します。例えば:

git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git

上記の場合、Gitは15分ごとにパスワードを要求します(デフォルト)。詳細git help credentialsはをご覧ください。

于 2012-04-07T16:16:09.053 に答える
82

問題が発生している場合は、次の引数に従って、特殊なケースに置き換えてください。

 !   #   $   &   '   (   )   *   +   ,   /   :   ;   =   ?   @   [   ]

%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D

だから例えば-

実際のURL:https://usern@me:p@ssword@git/reponame.git

使用するソリューションURL:https://usern%40me:p%40ssword@git/reponame.git

于 2019-12-11T10:51:44.923 に答える
75

@Bassetassenの回答のコメントで、@ ploscogit clone https://<token>@github.com/username/repository.gitは、少なくともGitHubからクローンを作成するために使用できると述べています。クローンを自動化しようとしているときに私がしたように誰かがこの答えに出くわした場合に備えて、私はそれを行う方法を拡張しようと思いました。

GitHubには、これを行う方法に関する非常に便利なガイドがありますが、自動化の目的ですべてを1行に含めたい場合の対処方法については説明していません。クローンURLにトークンを追加すると、トークンがプレーンテキストでに保存されることを 警告します.git/config。これは明らかにほとんどすべてのユースケースのセキュリティリスクですが、リポジトリを削除し、完了したらトークンを取り消す予定なので、気にしません。

1.トークンを作成します

GitHubには、トークンを取得する方法に関する完全なガイドがありますが、ここにTL;DRがあります。

  1. [設定]>[開発者設定]>[パーソナルアクセストークン]に移動します(ここに直接リンクがあります
  2. 「新しいトークンの生成」をクリックして、パスワードをもう一度入力します。(別の直接リンクがあります)
  3. 説明/名前を設定し、「リポジトリ」権限を確認して、ページの下部にある「トークンの生成」ボタンを押します。
  4. ページを離れる前に新しいトークンをコピーしてください

2.リポジトリのクローンを作成します

@ploscoが与えたコマンドと同じ、、、をgit clone https://<token>@github.com/<username>/<repository>.git置き換えるだけ<token>で、<username>あなた<repository>の情報が何であれ。

git clone https://<token>@github.com/<username>/<repository.git> <folder>特定のフォルダにクローンを作成する場合は、次のように最後にフォルダアドレスを挿入します。<folder>つまり、クローンを作成するフォルダです。もちろん、他の場所と同じように、、、などをここで使用.でき..ます~

3.痕跡を残さない

あなたがしていることがどれほど敏感であるかによっては、これのすべてが必要なわけではありません。

  • しばらくの間トークンを使用するつもりがない場合は、そのトークンをぶら下げたままにしたくないので、トークンページに戻って、その横にある削除ボタンを押してください。
  • リポジトリが不要な場合は、削除してくださいrm -rf <folder>
  • リポジトリが再度必要であるが、再度自動化する必要がない場合は、を実行してリモートを削除するgit remote remove originか、を実行してトークンを削除できますgit remote set-url origin https://github.com/<username>/<repository.git>
  • bashの履歴をクリアして、トークンがログに記録されたままにならないようにします。これを行うには多くの方法があります。この質問この質問を参照してください。ただし、最初から保存されないようにするために、上記のすべてのコマンドの前にスペースを追加する方が簡単な場合があります。

私はプロではないので、あらゆる種類のフォレンジック作業の痕跡が残らないという意味で、上記は安全ではない可能性があることに注意してください。

于 2018-05-05T18:56:40.140 に答える
34

多くの答えがありますが、ユーザー名またはパスワードに特殊文字が含まれていると、繰り返し発生する問題に直面します。

gitのユーザー名とパスワードをURLエンコードしてから、URL自体の一部として使用します(セキュリティ上の懸念がない場合)。

たとえば、ユーザー名のURLエンコードされた値

'user + 1'はuser%2B1です

およびパスワードのURLエンコードされた値

'Welcome @ 1234'はWelcome%401234です

次に、GITクローンのURLは次のようになります。

git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo完璧に動作しますが、

git clone https:// user + 1:Welcome @ 1234 @ actual-git-url-for-the-repoは、403エラーを出します

お役に立てれば。

念のため、オンラインでURLエンコードしたい:https ://www.urlencoder.org/

于 2019-04-17T07:12:59.893 に答える
19

私はこの問題を次のように解決しました。

ここに画像の説明を入力してください

于 2018-07-02T10:37:36.730 に答える
15

2021年8月13日以降、使用する必要があります

  • Gitクローン

    https://username:token@github.com/username/repository.git

トークンを生成するには:

設定>>開発者設定>>パーソナルアクセストークン>>新しいトークンを生成

  • Gitプッシュ

クローン作成が成功した後、次回実行するときにgit push、ユーザー名を再度指定する必要はありません。.git/configメモ帳でファイルを開くと、これを確認できます。

[remote "origin"]
    url = https://username:tokenxxxxxxxxxx@github.com/username/repo.git
于 2021-08-31T05:19:54.787 に答える
13

Windowsでは、次の手順を実行すると、GitHubログインウィンドウが再トリガーされますgit clone

  • 「クレデンシャルマネージャー」のスタートメニューを検索
  • 「Windowsクレデンシャル」を選択します
  • GitまたはGitHubに関連するクレデンシャルを削除します

結果

于 2018-10-16T11:57:03.800 に答える
8

を使用http/httpsしていて、ユーザー入力やユーザープロンプトをまったく必要とせずにプロセスを完全に自動化する場合(たとえば、CI / CDパイプライン内)、次のアプローチを使用できますgit credential.helper

GIT_CREDS_PATH="/my/random/path/to/a/git/creds/file"
# Or you may choose to not specify GIT_CREDS_PATH at all.
# See https://git-scm.com/docs/git-credential-store#FILES for the defaults used

git config --global credential.helper "store --file ${GIT_CREDS_PATH}"
echo "https://alice:${ALICE_GITHUB_PASSWORD}@github.com" > ${GIT_CREDS_PATH}

ALICE_GITHUB_PASSWORDここで、前のシェルコマンドまたはパイプライン構成などから環境変数を設定することを選択できます。

「store」ベースのgit-credential-helperは、パスワードと値をプレーンテキストで保存することを忘れないでください。したがって、トークン/パスワードの権限が非常に制限されていることを確認してください。


自動化されたシステムがリポジトリをフェッチする必要がある場合は、 https://alice@github.com/my_repo.gitを使用するだけです。これにより、git-credential-helperによるストアとしてのaliceinのクレデンシャルが使用されます。github.com

于 2020-04-27T18:21:28.600 に答える
5
git config --global core.askpass

同じ方法でクローンを作成する前に、これを最初に実行してください。修正する必要があります。

于 2018-09-05T08:32:31.780 に答える
5

gitにHTTPSクレデンシャルを提供するためにGIT_ASKPASS環境を使用することを好みます。
ログインとパスワードが変数にエクスポートされるUSR場合PSW、次のスクリプトは履歴とディスクにパスワードの痕跡を残しません+パスワードの特殊文字に対して脆弱ではありません。

GIT_ASKPASS=$(mktemp) && chmod a+rx $GIT_ASKPASS && export GIT_ASKPASS

cat > $GIT_ASKPASS <<'EOF'
#!/bin/sh
exec echo "$PSW"
EOF

git clone https://${USR}@example.com/repo.git

注意:ヒアドキュメントマーカーを一重引用符で囲んでいることに注意してください。これは、一時的なスクリプトが、変数のパスワード/拡張値ではなく、'EOF'文字通りの文字を保持することを意味します。$PSWPSW

于 2021-01-22T16:10:24.673 に答える
1

これは優れたStackOverflowの質問であり、回答は非常に有益であり、最近遭遇した厄介な問題を解決することができました。

私が働いている組織はAtlassian's BitBucket、リポジトリを完全にオンプレミスで保護できるように、基本的にはGitHubのバージョンである製品(Githubではない)を使用しています。チェックアウトした新しいリポジトリにパスワードが必要であるという点で、@coordinateと同様の問題が発生していました。私のクレデンシャルはすべてのBitBucketプロジェクトでグローバルに保存されていたため、クレデンシャルが失われた原因がわかりません。

つまり、次のGITコマンド(ユーザー名のみを指定)を入力すると、Gitの資格情報マネージャーにパスワードの入力を求められ、保存することができました。

git clone https://user@code.domain.org/git/[organization]/[team]/[repository.git]

注:括弧で囲まれたディレクトリサブパスは単に内部参照を参照しており、ユーザーによって異なります。

于 2019-10-29T23:04:25.137 に答える