ssh
可以-i
选择在身份验证时使用哪个私钥文件:
-i identity_file
选择从中读取 RSA 或 DSA 身份验证的身份(私钥)的文件。
~/.ssh/identity
对于协议版本 1,默认值为~/.ssh/id_rsa
,~/.ssh/id_dsa
对于协议版本 2,默认值为 。还可以在配置文件中按主机指定身份文件。可以有多个-i
选项(以及配置文件中指定的多个身份)。
在目录中具有多个私钥的系统上,是否有类似的方法来判断git
使用哪个私钥文件~/.ssh
?
答案1
在 中~/.ssh/config
添加:
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa_github
如果配置文件是新的,请使用以下命令检查访问权限
stat -c %a ~/.ssh/config
如果返回结果不是 600,则应该执行
chmod 600 ~/.ssh/config
现在你可以做git clone [email protected]:{ORG_NAME}/{REPO_NAME}.git
{ORG_NAME}
您的 GitHub 用户帐户(或组织帐户)的 GitHub URI 名称在 哪里。:
请注意,后面有一个冒号github.com
而不是斜线/
- 因为这不是 URI。
{REPO_NAME}
你的 GitHub 存储库的 URI 名称是- 例如,对于 Linux 内核这将是)。
git clone [email protected]:torvalds/linux.git
注意:在 Linux 和 macOS 上,请验证您的权限IdentityFile
是否为 400。SSH 将以不太明确的方式拒绝可读性太强的 SSH 密钥。它看起来就像是凭据被拒绝。在这种情况下,解决方案是:
chmod 400 ~/.ssh/id_rsa_github
答案2
环境变量GIT_SSH_COMMAND
GIT_SSH_COMMAND
从 Git 2.3.0 版本开始,你可以像这样使用环境变量:
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example" git clone example
请注意,-i
有时您的配置文件可能会覆盖它,在这种情况下,您应该给 SSH 一个空的配置文件,如下所示:
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example -F /dev/null" git clone [email protected]:example/example.git
配置core.sshCommand
自 Git 版本 2.10.0 起,您可以使用设置针对每个存储库或全局进行配置core.sshCommand
。不再需要使用环境变量。以下是如何克隆存储库并同时设置此配置的方法:
git clone -c "core.sshCommand=ssh -i ~/.ssh/id_rsa_example -F /dev/null" [email protected]:example/example.git
cd example/
git pull
git push
如果 repo 已经存在,请运行:
git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
配置保存在.git/config
答案3
有不直接的方式来判断git
要使用哪个私钥,因为它依赖于ssh
存储库身份验证。但是,仍有几种方法可以实现您的目标:
选项1:ssh-agent
您可以使用ssh-agent
它来临时授权您的私钥。
例如:
$ ssh-agent sh -c 'ssh-add ~/.ssh/id_rsa; git fetch user@host'
选项 2:GIT_SSH_COMMAND
使用GIT_SSH_COMMAND
环境变量传递 ssh 参数(Git 2.3.0+)。
例如:
$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
git clone user@host
您可以在一行中输入所有内容 — — 忽略$
并省略\
。
选项 3:GIT_SSH
通过使用环境变量传递 ssh 参数GIT_SSH
来指定备用ssh
二进制文件。
例如:
$ echo 'ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
$ chmod +x ssh
$ GIT_TRACE=1 GIT_SSH='./ssh' git clone user@host
注意:以上几行是 shell(终端)命令行,您应将其粘贴到终端中。它们将创建一个名为ssh
,使其可执行,并(间接)执行它。
笔记:GIT_SSH
自 v0.99.4 起可用(2005)。
选项 4:~/.ssh/config
使用~/.ssh/config
其他答案中建议的文件来指定私钥的位置,例如
Host github.com
User git
Hostname github.com
IdentityFile ~/.ssh/id_rsa
答案4
在 中使用自定义主机配置~/.ssh/config
,如下所示:
Host gitlab-as-thuc
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa.thuc
IdentitiesOnly yes
然后使用您的自定义主机名,如下所示:
git remote add thuc git@gitlab-as-thuc:your-repo.git