2011-03-16 149 views

回答

39

一个选项是使用ssh-agent并提供一个文件名到ssh-add

例如:

$ ssh-agent /bin/bash 
$ ssh-add ~/mykeys/id_rsa 
+0

它没有工作。 $ ssh-agent/bin/bash $ ssh-add/home/deepakkv/gitkeys/id_rsa 加入身份:/ home/deepakkv/gitkeys/id_rsa $ git push origin master 权限被拒绝(publickey)。 致命:远程端意外挂断 $ – deepujain 2013-10-18 14:01:02

+0

git使用了你的私钥,所以它看起来像这部分工作。可能在服务器端缺少某些东西(错误的密钥,未注册的密钥等)。)你可能想问一个新的问题。 – vhallac 2013-10-20 05:01:31

11

我会说~/.ssh/config把文件名,但你可能不会有访问此文件了。

您可以给ssh私钥使用-i keyfile选项。

现在怎么说git哪些选项传递给ssh?

GitTips page说创建一个包装脚本并指向GIT_SSH环境变量。

它看起来像你也可以使用git配置core.gitProxy,但我没有找到一个很好的例子,some mailing list message暗示它只适用于git:协议。

+0

@ dragon788感谢您修复链接,但您可以链接到该页面的正确部分(如我现在所做的那样)。 (下次只是一个提示。) – 2016-07-14 21:43:51

+0

从原始文章名称中我不太确定,并且链接它是否有意指向特定部分,因为链接名称是现在指向的“Gittips页面”。我还试图添加GIT_SSH_COMMAND,因为这显然是一个支持的环境变量,但当时我只是想修复断开的链接。 – dragon788 2016-07-14 22:03:43

45

您可以使用ssh config file来实现。

首先创建一个文件,你的名为config~/.ssh文件夹内,你可以使用一些如下命令

$ nano ~/.ssh/config 

然后,该文件的内容应该有你的关键的基础上每个主机名的位置。例如:

Host github.com 
IdentityFile ~/myPublicKeyFolder/myGitHubFile 
Host heroku.com 
IdentityFile ~/myPublicKeyFolder/myHerokuFile 

所以,当混帐试图访问每个主机将遵循基于Git的这个配置文件中的规则,承载您试图达到

+1

这非常酷,因为它也适用于Windows上的git。 – 2012-09-26 13:28:38

+0

在linux中没有工作。 – deepujain 2013-10-18 14:05:28

+1

@deepujain哪个linux? – 2013-10-18 23:59:51

1

对于一个项目,我的工作我的应用程序需要使用所有的git命令来吐出一个shell脚本来初始化/提交/推送到外部存储库。 〜/ .ssh/config不受限制,所以我在我的应用程序目录中有公钥/私钥。我用vhallac的答案。这是我在我的shell脚本来完成用我的钥匙:

eval `/usr/bin/ssh-agent` 
ssh-add /path/to/.ssh/id_rsa 

希望这可以帮助别人

4

使用ssh-agent

ssh-agent bash -c 'ssh-add /home/me/my_private_key; git clone [email protected]:uname/test-git-repo.git'