而是不寻常的情况下也许是,但我想要指定一个 SSH 的私钥使用从本地计算机执行解释器 (git) 命令时。

基本上如下所示︰ git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

或甚至更好的 (以拼音)︰

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

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

2010-12-30 19:42:01
问题评论:

请参阅以及超级用户在这一问题

我想知道为什么这如此不寻常的 Git 没有像ssh一样-i选项。

使用 git 2.10 (第 3 季度 2016),也有一个新的配置︰ git config core.sshCommand 'ssh -i private_key_file'我下面的答案,请参阅

回答:

工作应如下所示︰

ssh-agent $(ssh-add /home/christoffer/ssh_keys/theuser; git clone git@github.com:TheUser/TheProject.git)

或通过 orip 按照建议︰

ssh-agent bash -c 'ssh-add /home/christoffer/ssh_keys/theuser; git clone git@github.com:TheUser/TheProject.git'

git 将调用 ssh 它会发现其代理由环境变量;这反过来,将会加载密钥。

或者,将主页设置可能还达到目的,只要愿意安装程序的目录中包含仅.ssh 目录为家庭;这既可能包含 identity.pub 或设置 IdentityFile配置文件

但这将永久添加键为接受 SSH 键,右呢?我想要避免的因此 theuser2 不能乱动认证的项目。因此它不是实际使用不同操作系统的用户,这将是最好的选择是为 web 应用程序。

不,当 git 完成、 ssh 代理终止,并且忘记了密钥。

此命令 does'not 处理 windows git 大扫除。它说附近有意外标记 ssh-添加语法错误

(对于 windows 或 linux) 的固定的命令行应类似于︰ ssh-agent bash -c 'ssh-add sshkey; git clone url'

orips 的行有效的回答;马丁的是不行的。

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

相反,我详细阐述 @Martin v.Löwis 的提及将config设置为 SSH 上。

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文件。

引用

事实上,这是正确的答案。

Aaargh !downvoted 由于失误,错过了锁定超时-道歉之前发生错误。

"主机"和"主机名"行是没有必要的。仅在行的 IdentityFile 需要 (和可以指向任何地方-我用它作为一种权宜之计时我想要一天只有一台计算机上使用 git。完成后,我的密钥并删除 ~/.ssh/config 文件)

我发现当您指定多个键使用.ssh/配置,您需要在"主机"作为一部分的"git 远程添加"命令行中使用主机朋友名称。如果行"主机 stg",则您需要使用 git 远程添加 < someName > user@stg:/path_to_git_repo.git"。如果您使用确切的服务器名称,如 user@myserver.com: / path_to_git_repo.git,git 的不选取配置文件。因此,它不正确选择私有密钥文件。我试图通过将相同的内容推到 github heroku 和工作只有在给予中"git 远程添加"友好名称

我不清楚自己 github 的主机。我发现此链接︰ gist.github.com/jexchan/2351996.

有关~/.ssh/config的其他人的建议都是多余复杂。它可以很简单,例如︰

Host github.com
  IdentityFile ~/.ssh/github_rsa

效果很好,谢谢。

此答案应该是在最前面

多谢!答得好 !

这仅适用只有 github 的 1 用户帐户

太需要IdentitiesOnly选项。

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

非常好的解决方案,如果在同一个域,没有很好地处理其他解决方案中有多个帐户

非常不错的解决方案。此外可以简化这与 > GIT_SSH = my_git_ssh_wrapper;git 克隆 git@github.com:TheUser/TheProject.git

此解决方案还介绍情况时想要使用帐户的主目录没有从 git。

极好。您可以使用专用的服务器通过这种方式太︰ GIT_SSH="git_wrapper" git clone ssh://user@server/path/to/project"

这是我从事 cygwin 环境的唯一方法

从 Git 2.3.0 我们还提供简单的命令 (不需要配置文件):

GIT_SSH_COMMAND='ssh -i private_key_file' git clone host:repo.git

git_id是私人密钥的路径。

获得cannot run ssh -i /home/vagrant/.ssh/git: No such file or directory虽然存在444 Nov 16 18:12 /home/vagrant/.ssh/gitls -l /home/vagrant/.ssh/git

@ted: chmod 400 /home/vagrant/.ssh/git

@shantanoo git_id 是什么?它不是在答案中提到的。

@StealthRabbi︰ 我该在中重命名private_key_file ,使其更清晰的答案。

请输入您的翻译

Specify private SSH-key to use when executing shell command with or without Ruby?

确认取消