使用 SSH 密钥比密码更安全,这也适用于 Git。然而,与密码不同的是,更改 SSH 密钥或管理多个密钥更加困难。不过,通过编辑 SSH 配置,您可以使用不同的密钥连接到多个 Git 存储库。
SSH 如何与 Git 配合使用?
当您使用 SSH 而不是 HTTPS 时,Git 不只是使用您的私钥进行身份验证——它实际上与远程服务器建立了真正的 SSH 连接。它以静默方式执行此操作,因此您可能不知道它正在运行的命令,但它ssh 在幕后使用。
因为它使用您的默认ssh 命令,所以它会像您自己运行它一样,并在~/.ssh/id_rsa. 如果您在这里阅读本文,这可能不是您想要的,因此要更改它,您需要编辑 SSH 的配置,而不是 Git 的配置。
制作新的 SSH 密钥
您首先需要一个人来执行此操作,并且执行此操作非常容易。只需运行ssh-keygen 并使用-f 标志指定新的密钥名称。这将创建一个带有.pub 扩展名的私钥和一个公钥。
ssh-keygen -t rsa -f ~/.ssh/github
编辑 ~/.ssh/config
SSH 的配置文件允许设置“主机”,它会根据您连接的内容进行匹配,并允许修改所ssh使用的文件。
Host github
Hostname github.com
IdentityFile ~/.ssh/id_rsa.github
IdentitiesOnly yes
这将允许您对所有请求使用与主要密钥不同的 SSH 密钥github.com,但是如果您想对单独的 Git 存储库使用两个不同的密钥怎么办?例如,一个用于您的工作帐户,一个用于您的个人帐户。
好吧,您需要使用相同的主机定义两个具有不同名称的配置:
Host personal
Hostname github.com
IdentityFile ~/.ssh/githubpersonal
IdentitiesOnly yes
Host work
Hostname github.com
IdentityFile ~/.ssh/githubwork
IdentitiesOnly yes
通常这会导致配置冲突,但 Git 提供了一种解决方法。如果您有一个像 Github 这样的远程存储库与本地存储库链接,请将其删除:
git remote remove origin
然后,不要添加github.com 为远程,而是将其替换为 SSH 配置文件中的主机名称。Git 会识别这一点,并使用此 SSH 主机进行连接。您可以为每个存储库设置单独的主机。
git remote add origin git@personal:username/repository.git
手动覆盖
如果你不想弄乱 SSH 配置,或者只是想暂时覆盖它,Git 还提供了GIT_SSH_COMMAND 环境变量。你可以
GIT_SSH_COMMAND='ssh -i ~/.ssh/github -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
之后在同一个 shell 会话中运行的任何 Git 命令都将使用该 SSH 命令而不是默认命令。您还可以使用GIT_SSH.