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

Git: access a remote repository over ssh using a key file but without using ~/.ssh/config

是否可以使用ssh和标识文件(带私钥)访问(fetchpush远程存储库,而不在文件~/.ssh/config中添加条目,例如:

1
2
3
4
Host tingle
  HostName 111.222.333.444
  User git
  IdentityFile c/tmp/my_id_rsa

配置~/.ssh/config文件时,一切正常。然而,我们有一个脚本可以从远程回购克隆、检查、开始测试、提交结果并推送它们。脚本需要在任何计算机上运行,而不需要接触ssh配置文件。


您可以使用变量$GIT_SSH,参见文档,设置一个被调用的程序,而不是ssh。

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

根据自己的需要调整/my/own/ssh的内容,例如:

1
2
3
#!/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"$@"

据我所知,这是目前唯一一种不需要非常不整洁的路径操作就能做到这一点的方法。


您可以重写$GIT_SSH环境变量以使用自己的私钥:

首先,创建一个包装脚本。假设我们称之为gitssh.sh

1
2
#!/bin/bash
ssh -i /path/to/mykey"$@"

然后,将$GIT_SSH指向它:

1
export GIT_SSH=/path/to/gitssh.sh

现在,无论何时在ssh上运行git命令,它都将被这个脚本替换,并引用您的密钥。


下面的技巧就可以了

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

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

根据您的脚本,您可以通过在实际执行git之前定义和导出环境变量GIT_SSH_COMMAND来对此进行微调,或者仅在与tingle通信时使用if等。

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

上面的命令没有检查Git实际调用的主机。但是如果你绝望了,你可以尝试用这个"技巧"构建一个内联shell脚本,它检查主机名并模仿配置文件主机限制;-)。

作为一个可能看起来像这样的初学者:GIT_SSH_COMMAND="bash -c \"if [ \\\"$1\\\" = \\\"user@host\\\" ] ; then ssh -i c/tmp/my_id_rsa $@ ; else ssh $@ ; fi \" -- " git push

我没有测试这个并且知道引用;-)。这是为了那些绝望的人。


如果要使用自定义ssh密钥,可以尝试使用以下方法:

1
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只是一个包含密钥信息的证书文件。

  • 第一步是生成密钥对和PEM文件。
  • 下一步是在命令行中使用ssh将证书上载到远程服务器,这是第一次使用密码。
  • 最后一步,在不使用密码的情况下测试连接客户机到服务器。

请访问http://www.beginninglinux.com/home/server-administration/openssh-keys-certificates-authentication-pem-pub-crt!您可以在这里找到该方法的更多详细信息。