如何为 Git Shell 命令使用不同的私有 SSH 密钥

dd54ff2dbe51114

使用 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 密钥