该user@host:path/to/repo
格式告诉 Git 使用 ssh 以host
username 登录user
。来自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 以登录一次、GitHub 的 ssh 密钥密码帮助页面、gitolite 的 ssh 文档和Heroku 的 ssh 密钥文档。
在 GitHub(或 Heroku 或...)的多个帐户之间进行选择
如果您在 GitHub 或 Heroku 这样的地方有多个帐户,您将拥有多个 ssh 密钥(每个帐户至少一个)。要选择您要登录的帐户,您必须告诉 ssh 使用哪个私钥。
例如,假设您有两个 GitHub 帐户: foo
和bar
. 您的 ssh 密钥foo
is~/.ssh/foo_github_id
和您的 ssh 密钥bar
is ~/.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
然后,您将克隆这两个存储库,如下所示:
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 的替代方案:
警告:将您的密码添加到克隆 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
。