34

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

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

4

5 回答 5

50

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

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

$ nano ~/.ssh/config

然后,文件的内容应该具有基于每个主机名的密钥的位置。例如:

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

因此,当 git 尝试访问每个主机时,它将根据您尝试访问的 git 主机遵循此配置文件中的规则

于 2011-04-28T14:33:53.083 回答
42

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

例如:

$ ssh-agent /bin/bash
$ ssh-add ~/mykeys/id_rsa
于 2011-03-16T10:22:00.403 回答
11

我会说将文件名放入 中~/.ssh/config,但您也可能无权访问此文件。

您可以提供与该选项ssh一起使用的私钥。-i keyfile

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

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

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

于 2011-03-16T11:45:46.937 回答
4

使用 ssh 代理

ssh-agent bash -c 'ssh-add /home/me/my_private_key; git clone git@bitbucket.org:uname/test-git-repo.git'
于 2014-05-12T06:52:58.073 回答
1

对于我正在开发我的应用程序的项目,需要使用所有 git 命令来输出一个 shell 脚本来初始化/提交/推送到外部存储库。~/.ssh/config 不受限制,所以我的应用程序目录中有我的公钥/私钥。我使用了 vhallac 的答案。这是我必须在我的 shell 脚本中执行的操作才能使用我的密钥:

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

希望这可以帮助某人

于 2013-03-08T17:16:51.553 回答