使用多个 SSH 公钥

Dav*_*ong 97 git ssh-keys

我在 Unfuddle 上有一个个人帐户和一个公司帐户。在 Unfuddle 上,SSH 密钥只能用于一个帐户,因此我需要在我的笔记本电脑上为两个帐户创建一个单独的 SSH 密钥。我跑去ssh-keygen -t rsa生成两个不同名称的密钥(个人是默认名称,公司是 {company}_rsa)。现在的问题是,我的默认密钥似乎无处不在,我无法找到如何在 Git 中为单个存储库指定要使用的密钥。

所以我的问题是:如何指定要在 repo-to-repo 基础上使用的 SSH 密钥?

我设置了我的 ssh_config (~/.ssh/config) 但它似乎仍然不起作用。

配置:

Host {personalaccount}.unfuddle.com
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/id_rsa

Host {companyaccount}.unfuddle.com
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/cage_rsa
Run Code Online (Sandbox Code Playgroud)

我的公司 unfuddle 帐户上的仓库的 Git 仓库配置文件如下所示:

[remote "origin"]
     url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
     fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)

所以我不确定我的 ssh 配置或我的 git 配置是否有问题。

Chr*_*sen 109

如果你有一个活跃的ssh-agent中有您的id_rsa加载项,那么问题很可能是SSH的第一款产品是关键。Unfuddle 可能会接受它进行身份验证(例如在sshd 中),但拒绝它以授权访问公司存储库(例如,在他们用于授权的任何内部软件中,可能类似于 Gitolite)。也许有一种方法可以将您的个人密钥添加到公司帐户(多个人不会共享相同的corp_rsa公钥和私钥文件,是吗?)。


IdentitiesOnly .ssh/config配置关键字可以被用来限制的按键时的ssh提供给远程的sshd只是那些通过指定IdentityFile的关键字(即,其将拒绝使用碰巧被加载到一个活性的任何其他键的ssh-agent)。

试试这些.ssh/config部分:

Host {personalaccount}.unfuddle.com
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host {companyaccount}.unfuddle.com
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)

然后,使用如下的 Git URL:

git@{personalaccount}.unfuddle.com:{personalaccount}/my-stuff.git
git@{companyaccount}.unfuddle.com:{companyaccount}/their-stuff.git
Run Code Online (Sandbox Code Playgroud)

如果您想充分利用该.ssh/config机制,您可以提供您自己的自定义主机名并更改默认用户名:

Host uf-mine
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host uf-comp
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)

然后,使用如下的 Git URL:

uf-mine:{personalaccount}/my-stuff.git
uf-comp:{companyaccount}/their-stuff.git
Run Code Online (Sandbox Code Playgroud)

  • 如果您在同一个 Unfuddle 子域上有多个帐户(使用不同的 SSH 密钥),则需要使用第二种方法。 (7认同)
  • @Drew:如果密钥已经加载到代理中,那么命令仍然应该从代理中提取它。您确定您的密钥已预加载吗?在使用 Git 主机别名之前检查 `ssh-add -l`。此外,还需要提供公钥文件,以便 *ssh* 可以识别 *ssh-agent* 存储的密钥。您可以使用“ssh-keygen -f blah -y > blah.pub”等命令重新生成丢失的“.pub”文件。 (2认同)