Git:使用密钥文件使用密钥文件访问远程存储库但不使用〜/ .ssh/config

问题描述:

是否可以使用ssh和身份文件(使用私钥)访问(fetch/push)远程存储库在文件中添加一个条目~/.ssh/config如:Git:使用密钥文件使用密钥文件访问远程存储库但不使用〜/ .ssh/config

Host tingle 
    HostName 111.222.333.444 
    User git 
    IdentityFile c/tmp/my_id_rsa 

一切配置~/.ssh/config文件时工作正常。然而,我们有一个脚本,它可以从远程仓库克隆,检查,开始测试,提交结果并推送它们。该脚本需要在任何机器上运行,而无需触摸ssh配置文件。

+0

你能创建一个自定义的配置文件,只有在你需要它的地方才能使用(例如'ssh tingle -F my_custom_config')? – Ownaginatious

+0

这个答案可能会有用。我在本周早些时候寻找类似的东西时偶然发现了它。 http://stackoverflow.com/a/4565746/1789724 – austin

+0

检查这里的帖子: > http://stackoverflow.com/questions/7927750/specify-an-ssh-key-for-git-push-for-a -given-domain – prateek05

您可以覆盖$GIT_SSH环境变量来使用自己的私钥:

首先,创建一个包装脚本。让我们假设,我们把它叫做gitssh.sh

#!/bin/bash 
ssh -i /path/to/mykey "[email protected]" 

然后,点$GIT_SSH它:

export GIT_SSH=/path/to/gitssh.sh 

现在,只要您通过ssh运行git的命令,将这个脚本取代,并引用您的键。

您可以使用变量$GIT_SSH(请参阅documentation)设置被调用的程序而不是ssh。

这样你可以,例如不要 GIT_SSH=/my/own/ssh git clone https://my.own/repo.git

适应的/my/own/ssh内容到你自己的需要,例如:

#!/bin/bash 
# Wrapper for ssh, to use identity file and known hosts file 
exec /usr/bin/ssh -i /my/own/identity_file-o UserKnownHostsFile=/my/own/hosts.file "[email protected]" 

据我所知这是目前要做到这一点,而没有凌乱的路径的操作的唯一途径。

+1

这有效。如果我们的脚本创建一个自己的主机配置文件并添加到包装中,特别方便:exec/usr/bin/ssh - F our_ssh_host“$ @” –

下应该做的伎俩

GIT_SSH_COMMAND="ssh -i c/tmp/my_id_rsa" git push 

这允许您参数添加到SSH执行,而不需要额外的脚本文件。

根据您的脚本,您可以通过GIT中的实际执行之前定义和导出环境变量GIT_SSH_COMMAND微调这样或使用if等只使用它时,你与tingle

通信。在您的配置文件你也提到用户和主机。这应该已经成为git远程定义的一部分。如果你仍然需要覆盖这个,你可以将这些添加到上面的命令定义中。

一个注释上面的命令不检查实际上由git调用哪个主机。但是如果你绝望的话,你可以尝试用这个“技巧”来构建一个内联shell脚本,它检查主机名并模仿配置文件主机限制;-)。

担任首发,将可能是这样的: GIT_SSH_COMMAND="bash -c \"if [ \\\"$1\\\" = \\\"[email protected]\\\" ] ; then ssh -i c/tmp/my_id_rsa [email protected] ; else ssh [email protected] ; fi \" -- " git push

我没有测试这一点,并注意引用;-)的。这是为了绝望。

如果你想使用自定义的SSH密钥你可以用这个尝试:

ssh-agent bash -c 'ssh-add /path/to/your/id_rsa; git clone [email protected]:repo' 

这样,你不需要写/编辑任何配置文件或修改您的环境。

您可以使用.pem文件创建到GIT服务器

SSH -i安全连接 “yourfile.pem” yourHostName.com

。质子交换膜不过是像拥有关键信息的证书文件。

  • 第一步是生成密钥对和PEM文件。
  • 下一步是使用SSH,第一次使用密码,在命令行上将证书上传到远程服务器。
  • 最后一步,测试连接客户端到服务器而不使用密码。

结账http://www.beginninglinux.com/home/server-administration/openssh-keys-certificates-authentication-pem-pub-crt!你可以在这里找到更多关于这个方法的细节。