我知道如何为这样的 HTTPS 请求提供用户名和密码:
git clone https://username:password@remote
但我想知道如何向远程用户提供用户名和密码,如下所示:
git clone [email protected]
我已经试过像这样:
git clone username:password@[email protected]
git clone git@username:[email protected]
git clone [email protected]@username:password
但是他们没有工作。
基于 Michael Scharf 的评论:
您可以省略密码,以免将其记录在 Bash 历史记录文件中:
git clone https://[email protected]/username/repository.git
它将提示您输入密码。
或者,您可以使用:
git clone https://username:[email protected]/username/repository.git
这种方式从 GitHub 存储库为我工作。
user@host:path/to/repo
格式告诉 Git 使用 ssh 登录到具有用户名user
host
。从git help clone
:
ssh 协议也可以使用类似 scp 的语法:
[user@]host.xz:path/to/repo.git/
@
之前的部分是用户名,身份验证方法(密码,公钥等)由 ssh 而不是 Git 确定。 Git 无法将密码传递给 ssh,因为 ssh 甚至可能不使用密码,具体取决于远程服务器的配置。
ssh-agent
避免一直输入密码如果您不想一直输入 ssh 密码,典型的解决方案是生成一个公钥 / 私钥对 ,将公钥放入远程服务器上的~/.ssh/authorized_keys
文件中 ,并加载您的私钥键入ssh-agent
。另请参阅通过 SSH 配置 Git 登录一次 , 有关 ssh 密钥密码的 GitHub 帮助页面 , gitolite 的 ssh 文档和Heroku 的 ssh 密钥文档 。
如果您在 GitHub 或 Heroku 之类的地方有多个帐户,则将有多个 ssh 密钥(每个帐户至少一个)。要选择您要登录的帐户,必须告诉 ssh 使用哪个私钥 。
例如,假设您有两个 GitHub 帐户: foo
和bar
。您的foo
ssh 密钥是~/.ssh/foo_github_id
,而bar
的 ssh 密钥是~/.ssh/bar_github_id
。您想使用您的foo
帐户访问[email protected]:foo/foo.git
,并使用您的bar
帐户访问[email protected]:foo/foo.git
[email protected]: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
某些服务提供 HTTP 访问作为 ssh 的替代方法:
的 GitHub:
https://username:[email protected]/username/repository.git
惊人的:
https://username:[email protected]/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
。
在 @Bassetassen 的答案的评论中,@ plosco 提到您至少可以使用git clone https://<token>@github.com/username/repository.git
从 GitHub 进行克隆。我以为我会扩展方法,以防万一有人像我在尝试自动克隆时那样遇到此问题。
GitHub 上有关于如何执行此操作的非常方便的指南,但是如果您出于自动化目的将所有内容都包含在一行中,则它并未涵盖如何做。它警告说, 将令牌添加到克隆 URL 会将其以纯文本格式存储在 .git/config
。显然,这几乎对每个用例都是安全风险,但是由于我计划在完成后删除存储库并吊销令牌,因此我不在乎。
GitHub 上有关于如何获取令牌的完整指南 ,但这是 TL; DR。
就像 @plosco 给出的命令一样, git clone https://<token>@github.com/<username>/<repository>.git
,只需用任何信息替换<token>
, <username>
和<repository>
。
如果要将其克隆到特定文件夹,只需在末尾插入文件夹地址,如下所示: git clone https://<token>@github.com/<username>/<repository.git> <folder>
,其中您猜到了<folder>
是将其克隆到的文件夹!您当然可以使用.
, ..
, ~
等,就像在其他地方一样。
并非所有这些都是必要的,具体取决于您正在做的事情的敏感程度。
rm -rf <folder>
。 git remote remove origin
来删除远程,或者通过运行git remote set-url origin https://github.com/<username>/<repository.git>
删除令牌。 git remote set-url origin https://github.com/<username>/<repository.git>
。 请注意,我不是专家,因此从某种意义上讲,任何形式的法证工作都不会留下任何痕迹,因此上述内容可能并不安全。