如何指定在Git上执行shell命令时要使用的私人SSH-key?

也许是一个相当不寻常的情况,但我想指定一个私人的SSH-key,以便在从本地计算机执行shell(git)命令时使用。

基本上是这样的。

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连接到远程服务器的例子,它使用指定的私钥,但这是一个本地命令。这有可能吗?

解决办法

像这样的东西应该能起作用(由orip建议)。

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

如果你喜欢子壳,你可以试试下面的方法(虽然它比较脆弱)。

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

Git 将调用 SSH,它将通过环境变量找到它的代理;反过来,它将加载密钥。

另外,设置 "HOME "也可以做到这一点,前提是你愿意设置一个只包含".ssh "目录的目录作为 "HOME";这个目录可以包含一个identity.pub,或者一个配置文件设置IdentityFile。

评论(17)

my_git_ssh_wrapper的内容。

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

然后,你可以通过以下方式使用该密钥。

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git
评论(5)

你可以使用GIT_SSH环境变量。但你需要把ssh和选项包装成一个shell脚本。

参见git手册。man git在你的命令壳中。

评论(0)