在Linux上为Git私有SSH密钥设置自定义路径

35

我正在尝试在Linux上设置Git客户端。我已将我的私钥上传到该机器,我知道应该将它放在~/.ssh中,但我无法访问那个文件夹。

如何告诉Git在其他地方寻找私钥?

5个回答

51

您可以使用ssh配置文件来实现。

首先,在您的~/.ssh文件夹中创建一个名为config的文件,您可以使用以下命令:

$ nano ~/.ssh/config

然后,文件的内容应该根据每个主机名来确定密钥的位置。例如:

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

因此,当Git尝试访问每个主机时,它将根据你正在尝试到达的Git主机内部的规则遵循此配置文件中的规则。


43

一种方法是使用ssh-agent并向ssh-add提供一个文件名。

例如:

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

它没有起作用。 $ ssh-agent /bin/bash $ ssh-add /home/deepakkv/gitkeys/id_rsa 身份验证添加成功:/home/deepakkv/gitkeys/id_rsa (/home/deepakkv/gitkeys/id_rsa) $ git push origin master 权限被拒绝(公钥)。 致命错误:远程端意外中断。 - deepujain
Git使用了您的私钥,因此这部分似乎已经工作。可能是服务器端缺少某些内容(错误的密钥、未注册的密钥等)。您可能需要提出一个新问题。 - vhallac

12

我本来会建议你在~/.ssh/config中放置文件名,但你可能没有访问该文件的权限。

你可以使用-i keyfile选项向ssh提供要使用的私钥。

现在如何告诉git传递给ssh哪些选项呢?

GitTips页面上说创建一个包装脚本,并用GIT_SSH环境变量指向它。

看起来你也可以使用git配置core.gitProxy,但我没有找到一个好的例子,而且一些邮件列表信息表明它仅适用于git:协议。


@dragon788 谢谢您修复链接,但下次您可以将链接到那个页面的正确部分(就像我现在所做的)。(下次给个提示吧。) - Paŭlo Ebermann
我不太确定原始文章名称和链接是否有意指向特定部分,因为链接名称是“Gittips页面”,这就是它现在指向的地方。我也想添加GIT_SSH_COMMAND,因为它现在显然是一个支持的环境变量,但当时我只想修复损坏的链接。 - dragon788

4

使用ssh-agent

ssh-agent bash -c 'ssh-add /home/me/my_private_key; git clone git@bitbucket.org:uname/test-git-repo.git'

1

我正在开发一个项目,我的应用程序需要生成一个Shell脚本,其中包含所有的Git命令以便于初始化/提交/推送到外部存储库。由于~/.ssh/config是受限制的,因此我将我的公钥/私钥放在应用程序目录中。我使用了vhallac的答案。以下是我在Shell脚本中使用我的密钥所需执行的操作:

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

希望这能帮助到某个人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接