为给定域指定git push的SSH密钥

Specify an SSH key for git push for a given domain

我有以下用例:我希望能够使用用户gitolite-admin的私钥推到[email protected]:gitolite-admin,而我希望使用自己的私钥推到[email protected]:some_repo。Afaik,我不能用~/.ssh/config来解决这个问题,因为用户名和服务器名在这两种情况下都是相同的。由于我主要使用自己的私钥,所以我在~/.ssh/config中为[email protected]定义了它。有人知道如何重写用于单个git调用的密钥吗?

(除此之外:Gitolite根据密钥区分推送的用户,因此在访问、所有权和审核方面,用户@server字符串对于不同的用户是相同的,这不是问题。)


即使是相同的用户和主机,他们仍然可以在~/.ssh/config是杰出的。例如,如果您的配置看起来像这样:

1
2
3
4
5
6
7
8
9
10
11
Host gitolite-as-alice
  HostName git.company.com
  User git
  IdentityFile /home/whoever/.ssh/id_rsa.alice
  IdentitiesOnly yes

Host gitolite-as-bob
  HostName git.company.com
  User git
  IdentityFile /home/whoever/.ssh/id_dsa.bob
  IdentitiesOnly yes

那么你就不是在使用和gitolite-as-bobgitolite-as-alice主机名的URL:

1
2
git remote add alice git@gitolite-as-alice:whatever.git
git remote add bob git@gitolite-as-bob:whatever.git

你想包括一个选项,以防止使用默认IdentitiesOnly yes南通。否则,如果你也有匹配的ID文件的默认名称,他们想尝试不同的配置得到第一,因为其他的选项是"先赢"同住在一个appends)IdentityFile选项列表身份的尝试。湖:http://///450796 serverfault.com知识的问题是一站式的SSH密钥发行的A / 450807 # 450807错误


在一个替代的方法是提供通过使用longair以上标志是愿意在任何Git命令的别名,在任何远程SSH密钥,一个替代。库是基本的转换器运行的SSH身份当Git命令。

相对优势的主机别名的方法在其他的回答:

  • 想与任何Git命令或别名,甚至如果你不能remote明确指定位置。
  • 容易的工作,有许多库,因为你只需要设置一次通过它的客户端机器,需要在每个客户端机器通过存储一次。

我用一个小的脚本和一adminGit的别名。我可以这样做,例如:

1
git admin push

一推使用替代默认的远程SSH密钥("admin")。再次,你可以使用任何命令(不只是这一push)的别名。你可以做一个不git admin clone ...克隆库,你就只能使用"admin"的访问密钥。

步骤1:创建SSH密钥的替代选择的案例集A的密码,你这样做对其他人的机器。

步骤2:创建一个所谓的"ssh-as.sh脚本运行"的东西使用SSH,SSH密钥,而不使用一个给定的比默认的:

1
2
#!/bin/bash
exec ssh ${SSH_KEYFILE+-i"$SSH_KEYFILE"}"$@"

步骤3:创建一个所谓的"git-as.sh脚本"命令运行git使用给定的SSH密钥。

1
2
#!/bin/bash
SSH_KEYFILE=$1 GIT_SSH=${BASH_SOURCE%/*}/ssh-as.sh exec git"${@:2}"

步骤4:添加到别名(使用一些适当的"路径_ _脚本到你下面_"):

1
2
# Run git commands as the SSH identity provided by the keyfile ~/.ssh/admin
git config --global alias.admin \!"PATH_TO_SCRIPTS_DIR/git-as.sh ~/.ssh/admin"

更多的细节在:http://noamlewis.wordpress.com/13/01/24/Git管理在别名一运行git命令as a和SSH身份/


您可以使用git环境变量GIT_SSH_COMMAND。在Git存储库下的终端中运行:

1
GIT_SSH_COMMAND='ssh -i ~/.ssh/your_private_key' git submodule update --init

用您要使用的ssh私钥路径替换~/.ssh/your_private_key。您可以将后面的git命令(在示例中是git submodule update --init更改为其他命令,如git pullgit fetch等。


一个基于Unix的系统(Linux、BSD、Mac OS X),默认的身份是存储在目录家/美元。2、文件:
private key: $HOME/.ssh/id_rsa
public key: $HOME/.ssh/id_rsa.pub
当你不使用它ssh-i默认选项,使用私钥对authenticate与远程系统。

如果你有你想使用另一个密钥,例如美元的家庭/。/你有_部署的密钥,使用ssh -i ~/.ssh/deploy_key ...

它是恼人的。你可以在下面的行添加到您的家/美元.bash _概况:
ssh-add ~/.ssh/deploy_key
ssh-add ~/.ssh/id_rsa

所以每一次你使用sshgitscp(基本上ssh太),你不使用-i选项了。

你可以添加多个键就像在你家/美元.bash _文件的配置文件。


另一个选择是使用SSH SSH身份识别,你的设法。

它使用不同的密钥的自动负载和电流基于你的工作目录,SSH和期权,等等……这意味着你可以很容易有一个工作/目录/目录和私人密钥是使用不同的transparently最终与SSH和身份。


我在使用Git Bash Win7。以下为我工作。

创建一个配置文件在配置或~ /。/ C /用户/用户_ [名称]的_ /。/配置。文件中的回车:

1
2
Host your_host.com
     IdentityFile [absolute_path_to_your_.ssh]\id_rsa

我想有一个URL的主机和不只是一个"名称"或参考文献为您的主机。例如,

1
2
Host github.com
     IdentityFile c:/users/[user_name]/.ssh/id_rsa

位置路径可以被写在C / / /用户/用户_ [姓名]…………………格式

解决方案提供的是一scalzo佐丹奴大太。stackoverflow.com http:/ / / / / 9149518 1738546


您可能需要删除(或注释掉)默认主机配置.ssh/config


如果使用Git版本的Windows下的SSH,SSH的配置文件中的形象线的样子

1
IdentityFile /c/Users/Whoever/.ssh/id_rsa.alice

/cc:

检查,在Git Bash做吗

1
2
cd ~/.ssh
pwd

在文件配置密钥ssh中指定最多的是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Default GitHub user
Host one
 HostName gitlab.com
 User git
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/key-one
 IdentitiesOnly yes

#two user
Host two
 HostName gitlab.com
 User git
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/key-two
 IdentitiesOnly yes