执行shell命令时使用的键?

也许是一种相当不寻常的情况,但我想指定一个私有SSH密钥,以便在本地计算机上执行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'

如果你喜欢subshel​​l,你可以尝试以下(虽然它更脆弱):

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

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

或者,如果您愿意将仅包含.ssh目录的目录设置为HOME ,则设置HOME也可以实现这一诀窍: 这可能包含identity.pub或配置文件设置IdentityFile。


这些解决方案都不适合我。

相反,我详细说明了@Martin v。Löwis提到的为SSH设置config文件。

SSH将查找用户的~/.ssh/config文件。 我有我的设置为:

Host gitserv
    Hostname remote.server.com
    IdentityFile ~/.ssh/id_rsa.github
    IdentitiesOnly yes # see NOTES below

我添加一个远程git仓库:

git remote add origin git@gitserv:myrepo.git

然后git命令对我来说正常工作。

git push -v origin master

笔记

  • IdentitiesOnly yes必需的,以防止发送与每个协议的默认文件名匹配的标识文件的SSH默认行为。 如果你有一个名为~/.ssh/id_rsa的文件,在你的~/.ssh/id_rsa.github没有这个选项的情况下会试一下。
  • 参考

  • 在一个客户端上使用多个SSH私钥的最佳方法
  • 我怎么能阻止ssh提供一个错误的关键

  • 其他人对~/.ssh/config的建议是非常复杂的。 它可以像下面这样简单:

    Host github.com
      IdentityFile ~/.ssh/github_rsa
    
    链接地址: http://www.djcxy.com/p/4313.html

    上一篇: key to use when executing shell command?

    下一篇: How do I get the current absolute URL in Ruby on Rails?