栏目树
远程使用SSH协议时,使用指定的私钥的配置方法

我们知道,git仓库的远端可以使用https协议,也可以走SSH,当使用SSH时,需要配置密钥对,将公钥配置在远端上绑定用户,然后客户端使用私钥进行身份核对。

一般情况下,git命令或者其它git客户端,默认调用的私钥都是当前用户目录下的.ssh目录下的私钥,出于某些特定场景,不使用当前用户的私钥,而使用指定的私钥时,很多人就不知道怎么办了。

经过乌大湿的研究,终于找到方法:

  1. 在SourceTree,菜单“工具”->“选项”,选项窗口中的“一般”标签页,找到“SSH客户端配置”,“SSH客户端”选择OpenSSH,然后“SSH密钥”选择你需要使用的私钥。
    这个方法,是当前软件通用配置,各个仓库都会使用同一配置,如果想不同的仓库使用不同的私钥,请看往下看第3点。
    在“SSH客户端”选择“PuTTY/Plink”时,选择了ppk私钥也连不上,有可能是我配置不对。
  2. 在TortoiseGit(小乌龟git),默认情况,是使用“PuTTY/Plink”进行连接远端ssh的,在仓库目录右键,TortoiseGit子菜单组,设置,在“Git”->“远端”里,点击远端origin,右边的“Putty密钥”选择你想要使用的密钥,点击“应用”或者“确定”进行保存。

    这样就可以使用指定的密钥进行连接远程SSH了。这个配置是对当前仓库生效的,各个仓库可以配置不同的密钥。而且,这个配置是对当前远端生效的,当仓库配置了多个远端时,还可以对不同的远端配置不同的密钥。
  3. 当git客户端配置使用openSSH的ssh命令进行远程连接时(或者使用git命令行时),可以对当前仓库配置指定私钥,对其它仓库不影响。操作如下:
    编辑当前仓库的.git/config文件,在[core]组,添加一行sshCommand = "ssh -i A:/dev/keys/ed25519_2025",-i参数后面的是你要使用的私钥的路径。
    这样,使用任何git客户端,都生效。


最后,再聊一下为什么要配置指定私钥:为了安全。
举个例子,如果按“传统”做法,你在公司的电脑上生成密钥对,默认放到用户目录的.ssh目录下,当有其他人借用你的电脑使用时,那他是不是可以使用你的身份去获取源码,甚至用你的身份把源码推送到远端?如果有心人要害你,这样的操作多危险。
相反,如果是使用指定私钥的,像我上面举的例子,我使用的是A盘上的一个密钥,而这个A盘是我的移动硬盘,或者是U盘,只要我离开电脑,我就带走我的移动硬盘,其他人借用我的电脑,也没办法以我的身份去拉取源码或者推送源码。