「git clone git@remote.git」を実行するときにユーザー名とパスワードを指定するにはどうすればよいですか?


846

次のような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
できません。「@」の前の「git」はすでにユーザー名です。リポジトリのURL(git@remote.get)はどこから取得しましたか?別のユーザー名とパスワードを入力する必要があるという考えはどこから得ましたか?
Ken Thomases

3
私のリポジトリURLはheroku "git@heroku.com:zxy-helloworld.git"からのものです。そして、私はemacsシェルを使用してクローンとプッシュを行います。シェルがパスワードを要求すると、emacsがハングします。これは、Windows上のEmacsの既知の問題です:gnu.org/software/emacs/windows/...
座標

ユーザー名がメールの場合はどうなりますか?どのように入力しますか? myemail @ gmail.com @ example.com
キョンペレス

回答:


1319

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

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

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

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

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

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

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


5
ちなみに同じである必要はありません。同僚がgitリポジトリを作成し、別のアカウントとしてログインしている場合、それらは同じではありません。
holgac 2013

49
.git / configに保存されているこのファイルのURLにパスワードを含めることはお勧めできません。安全ではありません
。ssh

55
@MrDukは問題ありません。エスケープしてください(%40 iircとして)。
Benjamin Gruenbaum 2014

57
パスワードは省略できますgit clone https://username@github.com/username/repository.git。gitはあなたに尋ね、それは.git / configにもbash履歴にも保存されません
Michael_Scharf

37
行の先頭に「space」と入力して、Linuxがコマンドを履歴に保存しないようにすることもできます
Nicolas Zozol

213

user@host:path/to/repo形式はにログインするためにsshを使用するにGitを伝えるhostユーザー名を持ちます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です。また、Git over SSHを1回ログインするための設定GitHubのssh キーパスフレーズに関するヘルプページ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あなたにfooアカウントとgit@github.com:bar/bar.gitあなたとbarのアカウント。次のものをに追加します~/.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アクセスを提供します。

警告:クローン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については、を参照してください。


これはgitがSSHでどのように機能するかを最もよく説明しています。私の理解では、git @ githost.com:path / to / repo.gitを指定すると、ユーザーにgit自体であり、ssh-agentから資格情報(公開鍵)を取得する必要があることをgitに効率的に伝えます。 「githost.com」をホストします。
Anael

39

@Bassetassenの回答のコメントで、@ plosco git 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の履歴をクリアして、トークンがログに記録されないようにします。これを行うには多くの方法があります。この質問この質問を参照してください。ただし、上記のすべてのコマンドの先頭にスペースを追加することで、最初から保存されないようにする方が簡単な場合があります。

私はプロではないことに注意してください。上記の方法は、いかなる法医学的作業にも痕跡が残らないという意味では安全ではない可能性があります。


1
https://<token>@github.comポータルで受け入れられなかったため、使用しなければなりませんでしたhttps://oauth2:<token>@github.com
MushyPeas

25

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

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/


13

私はこの問題を次の方法で解決しました:

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


11
コマンドラインでパスワードを入力することは決して良い考えではありません。システムがコマンドライン履歴をファイルに保存することをご存知ですか?(例:Linuxには.bash_historyという名前の隠しファイルがあります)
8

正しい。これを行うとき、またはこのような場合に非常に便利なときはいつでも、使用したコマンドを常に履歴から削除します(history -d)。
Francesco Marchetti-Stasi

4
@ FrancescoMarchetti-Stasiコマンドを削除する必要はありません。コマンドの先頭にスペースを使用するだけで、履歴に保存されません。
Ishtiyaq Husain

はい-ほんの数か月前、Unixシステムで約30年経ってからそれを学びました...恥ずかしいです:)
Francesco Marchetti-Stasi

9

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

  • 「Credential Manager」のスタートメニューを検索
  • 「Windows資格情報」を選択します
  • GitまたはGitHubに関連する資格情報を削除します

結果



5
git config --global core.askpass

同じ方法で複製する前にこれを最初に実行してください。修正する必要があります!


3
それを試してみましたが、まだそれを求めていません。
Maarten Kieft、2018年

設定グローバルそれは他のクローンまで混乱可能性として設定することは良いアイデアになることはありません。
マーティン

1

これは優れたスタックオーバーフローの質問であり、答えは非常に有益であり、最近遭遇した厄介な問題を解決することができました。

私が働いている組織Atlassian's BitBucketは、GitHubのバージョンではなく製品(GitHubではない)を使用しているため、リポジトリをオンプレミスで完全に保護できます。チェックアウトした新しいリポジトリにパスワードが必要だったという点で、@ coordinateと同様の問題が発生していました。私の資格情報はすべての人のためにグローバルに保存されましたBitBucketプロジェクトでので、資格情報の喪失を引き起こした原因は不明です。

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

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

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


0

使用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、前のシェルコマンドまたはパイプライン構成などから環境変数を設定することを選択できます。

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


今すぐ簡単に使用します。https://alice@github.com/my_repo.gitあなたの自動化されたシステムが必要な場所はレポをフェッチするために-それはのための資格情報を使用しますalicegithub.comのgit-資格ヘルパーによってストアとして。

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