这可能是一种非常不寻常的情况,但我想指定在本地计算机上执行shell(git)命令时要使用的私有SSH密钥。

基本上是这样的:

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

或者更好(用Ruby):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

我见过使用Net::SSH连接到远程服务器的示例,该服务器使用指定的私钥,但这是一个本地命令。有可能吗?


当前回答

GIT_SSH_COMMAND="ssh -i /path/to/git-private-access-key" git clone $git_repo

or

export GIT_SSH_COMMAND="ssh -i /path/to/git-private-access-key"
git clone REPO
git push

其他回答

问题是当您在同一主机上有不同的远程存储库(比如github.com),并且您希望使用不同的ssh密钥(即不同的github帐户)与它们进行交互时。

为了做到这一点:

首先,您应该在~/.ssh/config文件中声明不同的密钥。#github.com上常用存储库的密钥主机github.com主机名github.com用户git身份文件~/.ssh/id_rsa#github.com上特定存储库的密钥主机XXX主机名github.com用户git身份文件~/.ssh/id_other_rsa通过这样做,您可以将第二个密钥与github.com的新友好名称“XXX”相关联。然后,您必须更改特定存储库的远程源,以便它使用您刚才定义的友好名称。在命令提示符下转到本地存储库文件夹,并显示当前远程源:>git远程-v起源git@github.com:myuser/myrepo.git(获取)起源git@github.com:myuser/myrepo.git(推送)然后更改原点:>git远程设置url源git@XXX:myuser/myrepo.git>git远程-v起源git@XXX:myuser/myrepo.git(获取)起源git@XXX:myuser/myrepo.git(推送)现在你可以推,取。。。自动按右键。

您可以使用GIT_SSH环境变量。但是您需要将ssh和选项打包到shell脚本中。

请参阅命令shell中的git-manual:man-git。

其他人对~/.ssh/config的建议非常复杂。它可以很简单:

Host github.com
  IdentityFile ~/.ssh/github_rsa

2021。如果你在Mac上。

假设你在aws上有一个ubuntu服务器,你通常会这样连接:

% ssh -i blah/yourkeypair.pem ubuntu@test.fattie.com

仅在终端中

% export GIT_SSH_COMMAND="ssh -i /Users/fattie/Desktop/blah/yourkeypair.pem"

在你完成之后。然后你可以自由地。。。

% git clone ubuntu@test.fattie.com:/home/ubuntu/teste.git  

这会将服务器上的repo克隆到本地文件夹“teste”,

然后,在teste/执行通常的命令时,您可以自由地执行。。。

% git push origin master

等等

--

另请注意:https://stackoverflow.com/a/67287133/294884


至于在服务器上,似乎基本上

] git clone --bare the-actual-folder teste.git

然后在teste.git中

] git init --bare --shared

这些解决方案都不适合我。

相反,我详细介绍了@Martin v.Löwis提到的为SSH设置配置文件。

SSH将查找用户的~/.SSH/config文件。我的设置如下:

Host gitserv
    Hostname remote.server.com
    IdentityFile ~/.ssh/id_rsa.github
    IdentitiesOnly yes # see NOTES below

我添加了一个远程git存储库:

git remote add origin git@gitserv:myrepo.git

然后git命令对我来说正常工作。

git push -v origin master

笔记

IdentitesOnly yes是必需的,以防止SSH默认行为发送与每个协议的默认文件名匹配的标识文件。如果您有一个名为~/.ssh/id_rsa的文件,则在不使用此选项的情况下,将在~/.sss/id_rsa.gitub之前尝试该文件。

工具书类

在一个客户端上使用多个SSH私钥的最佳方法我怎样才能阻止ssh提供错误的密钥