我想使用多个私钥连接到不同的服务器或同一服务器的不同部分(我的用途是服务器的系统管理、Git管理和同一服务器中的正常Git使用)。我尝试简单地将密钥堆叠在id_rsa文件中,但没有用。

显然,要做到这一点,一个简单的方法是使用命令

ssh -i <key location> login@server.example.com 

这很麻烦。

有什么建议可以让你做这件事更容易一些吗?


当前回答

前面的回答已经正确地解释了如何创建一个配置文件来管理多个ssh密钥。我认为,还需要解释的重要事情是在克隆存储库时用别名替换主机名。

假设,您公司的GitHub帐户的用户名是abc1234。 假设你的个人GitHub账户的用户名是jack1234

并且,假设您已经创建了两个RSA密钥,即id_rsa_company和id_rsa_personal。因此,您的配置文件将如下所示:

# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company

# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal

现在,当你从公司的GitHub帐户克隆存储库(命名为demo)时,存储库URL将类似于:

Repo URL: git@github.com:abc1234/demo.git

现在,在做git克隆时,你应该把上面的存储库URL修改为:

git@company:abc1234/demo.git

注意github.com现在是如何被我们在配置文件中定义的别名“company”所取代的。

同样,您必须根据配置文件中提供的别名修改个人帐户中存储库的克隆URL。

其他回答

您可以尝试这个sshmulti npm包来维护多个SSH密钥。

我喜欢在~/.ssh/config文件中设置以下方法:

# Configuration for GitHub to support multiple GitHub  keys
Host  github.com
  HostName github.com
  User git

# UseKeychain adds each keys passphrase to the keychain so you
# don't have to enter the passphrase each time.
  UseKeychain yes

# AddKeysToAgent would add the key to the agent whenever it is
# used, which might lead to debugging confusion since then
# sometimes the one repository works and sometimes the
# other depending on which key is used first.
#  AddKeysToAgent yes

# I only use my private id file so all private
# repositories don't need the environment variable
# `GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa"` to be set.
  IdentityFile ~/.ssh/id_rsa

然后在你的存储库中创建一个.env文件,其中包含要使用的ssh命令:

GIT_SSH_COMMAND="ssh -i ~/.ssh/your_ssh_key"

如果你使用dotenv,环境变量会自动导出,你可以为每个项目/目录指定你想要的键。口令只被请求一次,因为它被添加到密钥链中。

这个解决方案与Git一起完美地工作,并且设计为在Mac上工作(由于UseKeychain)。

在CentOS 6.5上运行OpenSSH_5.3p1和OpenSSL 1.0.1e-fips,我通过重命名密钥文件来解决这个问题,这样它们都没有默认名称。

我的.ssh目录包含id_rsa_foo和id_rsa_bar,但没有id_rsa等。

正如Atlassian博客页面上提到的, 在.ssh文件夹中生成一个配置文件,包括以下文本:

#user1 account
 Host bitbucket.org-user1
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user1
     IdentitiesOnly yes

 #user2 account
 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

然后,您可以简单地用后缀域签出,在项目中,您可以在本地配置作者名称等。

我同意Tuomas使用ssh-agent。我还想为工作添加第二个私钥,这个教程对我来说非常有效。

步骤如下:

$ ssh-agent bash $ ssh-add /path。到/private/key,例如ssh-add ~/.ssh/id_rsa 通过$ ssh-add -l验证 使用$ssh -v <主机url>例如ssh -v git@assembla.com进行测试