使用 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 的配置文件允许设置“Hosts”,它将根据您连接的内容进行匹配,并允许修改所ssh
使用的文件。
托管github 主机名 github.com IdentityFile ~/.ssh/id_rsa.github 身份只有是
这将允许您对所有请求使用与主要密钥不同的 SSH 密钥github.com
,但是如果您想对单独的 Git 存储库使用两个不同的密钥怎么办?例如,一个用于您的工作帐户,一个用于您的个人帐户。
好吧,您需要使用相同的主机定义两个具有不同名称的配置:
主持人个人 主机名 github.com IdentityFile ~/.ssh/githubpersonal 身份只有是 主持工作 主机名 github.com IdentityFile ~/.ssh/githubwork 身份只有是
通常这会导致配置冲突,但 Git 提供了一种解决方法。如果您有一个像 Github 这样的远程存储库与您的本地存储库链接,请将其删除:
git远程删除原点
然后,不要添加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
.
未经允许不得转载:表盘吧 » 如何为 Git Shell 命令使用不同的私有 SSH 密钥