我想使用多个私钥连接到不同的服务器或同一服务器的不同部分(我的用途是服务器的系统管理、Git管理和同一服务器中的正常Git使用)。我尝试简单地将密钥堆叠在id_rsa文件中,但没有用。
显然,要做到这一点,一个简单的方法是使用命令
ssh -i <key location> login@server.example.com
这很麻烦。
有什么建议可以让你做这件事更容易一些吗?
我想使用多个私钥连接到不同的服务器或同一服务器的不同部分(我的用途是服务器的系统管理、Git管理和同一服务器中的正常Git使用)。我尝试简单地将密钥堆叠在id_rsa文件中,但没有用。
显然,要做到这一点,一个简单的方法是使用命令
ssh -i <key location> login@server.example.com
这很麻烦。
有什么建议可以让你做这件事更容易一些吗?
当前回答
在CentOS 6.5上运行OpenSSH_5.3p1和OpenSSL 1.0.1e-fips,我通过重命名密钥文件来解决这个问题,这样它们都没有默认名称。
我的.ssh目录包含id_rsa_foo和id_rsa_bar,但没有id_rsa等。
其他回答
您可以尝试这个sshmulti npm包来维护多个SSH密钥。
现在,使用最新版本的Git,我们可以在特定于存储库的Git配置文件中指定sshCommand:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
sshCommand = ssh -i ~/.ssh/id_rsa_user
[remote "origin"]
url = git@bitbucket.org:user/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
前面的回答已经正确地解释了如何创建一个配置文件来管理多个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。
正如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
然后,您可以简单地用后缀域签出,在项目中,您可以在本地配置作者名称等。
对我来说,在MacOs上,唯一可行的解决方案就是在文件~/.ssh/config中添加这个:
Host *
IdentityFile ~/.ssh/your_ssh_key
IdentityFile ~/.ssh/your_ssh_key2
IdentityFile ~/.ssh/your_ssh_key3
AddKeysToAgent yes
Your_ssh_key没有任何扩展名。不要使用.pub。