我知道如何为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

但它们并没有起作用。


根据Michael Scharf的评论:

你可以省略密码,这样它就不会被记录在你的Bash历史文件中:

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

它将提示您输入密码。

或者,你可以使用:

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

我从GitHub存储库中找到了这种方法。


user@host:path/to/repo格式告诉Git使用ssh以用户名user登录主机。从git帮助克隆:

另一种类似scp的语法也可以用于ssh协议: [user@] host.xz: / / repo.git /路径

@前面的部分是用户名,身份验证方法(密码、公钥等)由ssh决定,而不是Git。Git无法将密码传递给ssh,因为ssh甚至可能不使用密码,这取决于远程服务器的配置。

使用ssh-agent可以避免一直输入密码

如果您不想一直输入ssh密码,典型的解决方案是生成一个公钥/私钥对,将公钥放在~/。打开远程服务器上的Ssh /authorized_keys文件,并将私钥加载到Ssh -agent中。还可以参考配置Git通过SSH登录一次,GitHub的SSH密钥密码帮助页面,gitolite的SSH文档和Heroku的SSH密钥文档。

在GitHub(或Heroku或…)

如果你在GitHub或Heroku等地方有多个帐户,你将有多个ssh密钥(每个帐户至少一个)。要选择要作为哪个帐户登录,必须告诉ssh要使用哪个私钥。

例如,假设你有两个GitHub帐户:foo和bar。foo的ssh键是~/。Ssh /foo_github_id, bar的Ssh密钥为~/. Ssh /bar_github_id。你需要用你的foo帐户访问git@github.com:foo/foo.git,用你的bar帐户访问git@github.com:bar/bar.git。您可以在~/.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

然后,您将复制两个存储库,如下所示:

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

一些服务提供HTTP访问作为ssh的替代方案:

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帮助凭证。


在@ bassetassen的回答的评论中,@plosco提到,你可以使用git克隆https://<token>@github.com/username/repository.git从GitHub克隆至少。我想我应该扩展一下如何做到这一点,以防有人遇到这个答案,就像我在尝试自动克隆时所做的那样。

GitHub有一个关于如何做到这一点的非常方便的指南,但它没有涵盖如果你想把它都包含在一行中以实现自动化的目的该怎么做。它警告说,将令牌添加到克隆URL将以明文形式存储在.git/config中。这显然对几乎每个用例都是一个安全风险,但由于我计划在完成时删除回购并撤销令牌,所以我不在乎。

1. 创建令牌

GitHub有一个关于如何获得令牌的完整指南,但这里是TL;DR。

转到设置>开发人员设置>个人访问令牌(这里有一个直接链接) 点击“Generate a New Token”并再次输入密码。(这是另一个直接链接) 设置它的描述/名称,检查“回购”权限,并点击页面底部的“生成令牌”按钮。 在离开页面之前复制新令牌

2. 克隆回购

与@plosco给出的命令相同,git克隆https://<token>@github.com/<username>/<repository>.git,只需将<token>, <username>和<repository>替换为您的任何信息。

如果你想克隆它到一个特定的文件夹,只需在最后插入文件夹地址,像这样:git克隆https://<token>@github.com/<用户名>/<repository.git> <文件夹>,其中<文件夹>是,你猜对了,文件夹要克隆到!你当然可以用.., ~,等等,就像你在其他地方一样。

3.不留痕迹

并非所有这些都是必要的,这取决于您所做的事情有多敏感。

You probably don't want to leave that token hanging around if you have no intentions of using it for some time, so go back to the tokens page and hit the delete button next to it. If you don't need the repo again, delete it rm -rf <folder>. If do need the repo again, but don't need to automate it again, you can remove the remote by doing git remote remove origin or just remove the token by running git remote set-url origin https://github.com/<username>/<repository.git>. Clear your bash history to make sure the token doesn't stay logged there. There are many ways to do this, see this question and this question. However, it may be easier to just prepend all the above commands with a space in order to prevent them being stored to begin with.

请注意,我不是专业人士,所以上述内容可能不安全,因为任何类型的法医工作都不会留下任何痕迹。


我用以下方法解决了这个问题:


git config --global core.askpass

在克隆之前先运行这个,应该是固定的!


在Windows上,当git克隆时,以下步骤应该重新触发GitHub登录窗口:

在开始菜单中搜索“凭据管理器” 选择“Windows凭证” 删除所有与Git或GitHub相关的凭证


虽然有很多答案,但我自己经常遇到用户名或密码中有特殊字符的问题。

URL编码你的用户名和密码的git,然后使用它作为URL本身的一部分(当没有安全问题)。

比如说,URL编码的用户名的值

“用户+1”是用户%2B1

和URL编码的密码值

“Welcome@1234”是欢迎%401234

然后你的GIT克隆URL看起来是这样的,

git克隆https://user%2B1:Welcome%401234@actual-git-url for-the-repo工作完美,然而, git克隆https://user+1:Welcome@1234@actual-git-url-for-the-repo给你403个错误

希望这能有所帮助。

以防万一,要在线编码URL: https://www.urlencoder.org/


这是一个很棒的Stack Overflow问题,答案非常有启发性,因此我能够解决最近遇到的一个烦人的问题。

我工作的组织使用Atlassian的BitBucket产品(不是Github),本质上是他们的Github版本,因此存储库可以完全在前提下得到保护。我遇到了与@coordinate类似的问题,因为我签出的新存储库需要密码。我的证书被保存在所有BitBucket项目的全球范围内,所以我不确定是什么原因导致了证书的丢失。

简而言之,我可以输入以下GIT命令(只提供我的用户名),然后提示GIT的凭证管理器提示我输入密码,然后我就可以保存密码了。

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

注意:括号内的目录子路径只是指内部引用,并且会因你而异!


如果这些参数正在产生问题,请使用ur的特殊情况替换它们:

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

%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


如果您正在使用http/https,并且希望完全自动化该过程,而不需要任何用户输入或任何用户提示(例如:在CI/CD管道中),您可以使用以下方法利用git凭据.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环境变量从以前的shell命令或从管道配置等。

记住,基于“存储”的git- credentials -helper以明文形式存储密码和值。因此,请确保您的令牌/密码的权限非常有限。


现在只需使用https://alice@github.com/my_repo.git无论你的自动系统需要获取回购-它将使用凭据alice在github.com存储由git-credential-helper。


我更喜欢使用GIT_ASKPASS环境为git提供HTTPS凭据。 如果将登录名和密码导出为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

注意:此处doc标记“EOF”周围的单引号意味着临时脚本保存$PSW字符,而不是PSW变量的密码/扩展值


2021年8月13日后必须使用

Git克隆 https://username:token@github.com/username/repository.git

生成令牌:

设置>>开发人员设置>>个人访问令牌>>生成新的令牌

去推

克隆成功后,下次当你做git推送时,你将不必再次提到用户名。你可以在记事本中打开.git/config文件来确认

[remote "origin"]
    url = https://username:tokenxxxxxxxxxx@github.com/username/repo.git

要克隆存储库,首先应该生成一个访问令牌(您不能再使用登录密码),然后使用这个生成的令牌克隆存储库。

生成访问令牌:

github: 设置>开发人员设置>个人访问令牌>生成新的令牌

bitbucket都: 个人设置>应用密码>创建应用密码

克隆存储库:

github:

$ git clone https://YOUR-USERNAME:GENERATED-TOKEN@github.com/YOUR-USERNAME/YOUR-REPOSITORY

bitbucket都:

git clone https://YOUR-USERNAME@bitbucket.org/YOUR-REPOSITORY

它将提示您输入已生成的令牌。


如果你有凭据存储在任何类型的凭据帮助中,但没有将凭据帮助配置为全局激活,你可以像这样克隆:

git clone https://git.example.com/ns/repo.git --config=credential.helper=store

这将在克隆之前在本地设置凭据帮助配置(仅针对新的回购)。