这可能是一种非常不寻常的情况,但我想指定在本地计算机上执行shell(git)命令时要使用的私有SSH密钥。

基本上是这样的:

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

或者更好(用Ruby):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

我见过使用Net::SSH连接到远程服务器的示例,该服务器使用指定的私钥,但这是一个本地命令。有可能吗?


当前回答

此外,作为一个简单的“解决方法”,如果您不经常需要它:

删除所有ssh标识

ssh-add -D

重新添加您需要使用的

ssh-add ~/.ssh/MyProperProfile

做gits

(可选)通过添加其他标识(或所有标识)进行还原。

其他回答

我使用GIT_SSH环境变量。这是我的包装器,类似于上面的乔·布洛克,但可以处理任何数量的参数。

文件~/gitwrap.sh

#!/bin/bash
ssh -i ~/.ssh/gitkey_rsa "$@"

然后,在my.bashrc中添加以下内容:

export GIT_SSH=~/gitwrap.sh

如果您的路径上有要使用给定标识文件签名的目录,则可以通过设置ControlPath,通过.ssh/config文件指定使用特定标识文件,例如:

host github.com
  ControlPath ~/Projects/work/**
  HostName github.com
  IdentityFile ~/.ssh/id_work
  User git

然后,ssh将在给定的工作路径下执行git命令时使用指定的标识文件。

问题是当您在同一主机上有不同的远程存储库(比如github.com),并且您希望使用不同的ssh密钥(即不同的github帐户)与它们进行交互时。

为了做到这一点:

首先,您应该在~/.ssh/config文件中声明不同的密钥。#github.com上常用存储库的密钥主机github.com主机名github.com用户git身份文件~/.ssh/id_rsa#github.com上特定存储库的密钥主机XXX主机名github.com用户git身份文件~/.ssh/id_other_rsa通过这样做,您可以将第二个密钥与github.com的新友好名称“XXX”相关联。然后,您必须更改特定存储库的远程源,以便它使用您刚才定义的友好名称。在命令提示符下转到本地存储库文件夹,并显示当前远程源:>git远程-v起源git@github.com:myuser/myrepo.git(获取)起源git@github.com:myuser/myrepo.git(推送)然后更改原点:>git远程设置url源git@XXX:myuser/myrepo.git>git远程-v起源git@XXX:myuser/myrepo.git(获取)起源git@XXX:myuser/myrepo.git(推送)现在你可以推,取。。。自动按右键。

对于gitlab RSA认证是

Host gitlab.com
  RSAAuthentication yes
  IdentityFile ~/.ssh/your_private_key_name
  IdentitiesOnly yes

医生来了

要使GIT_SSH_COMMAND环境变量在Windows(CMD)下工作,而不是:

set GIT_SSH_COMMAND="ssh -i private_key_file"

Use:

set "GIT_SSH_COMMAND=ssh -i private_key_file"

报价必须是这样的

set "variable=value" 

一些背景:https://stackoverflow.com/a/34402887/10671021