我想使用多个私钥连接到不同的服务器或同一服务器的不同部分(我的用途是服务器的系统管理、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等。
其他回答
我曾经遇到过这个问题,当时我有两个Bitbucket帐户,想要为两个帐户存储单独的SSH密钥。这对我来说很管用。
我创建了两个单独的ssh配置,如下所示。
Host personal.bitbucket.org
HostName bitbucket.org
User git
IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
HostName bitbucket.org
User git
IdentityFile /Users/username/.ssh/work
现在当我必须从我的工作帐户克隆一个存储库时,命令如下所示。
git clone git@bitbucket.org:teamname/project.git
我必须修改这个命令:
git clone git@**work**.bitbucket.org:teamname/project.git
同样,从我的个人帐户克隆命令必须修改为
Git克隆git@personal.bitbucket.org:name/personalproject.git
更多信息请参考这个链接。
您可以指示ssh在连接时连续尝试多个键。方法如下:
$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on
$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$
这样就不必指定哪个密钥适用于哪个服务器。它会使用第一个工作键。
此外,只有当给定的服务器愿意接受密钥时,您才可以输入密码短语。如上所述,ssh不会尝试询问.ssh/id_rsa的密码,即使它有密码。
当然,它不会像其他答案那样胜过每个服务器的配置,但至少您不必为您连接的所有服务器和每个服务器添加配置!
您可以在~/中创建一个名为config的配置文件。ssh文件夹。它可以包含:
Host aws
HostName *yourip*
User *youruser*
IdentityFile *idFile*
这将允许您像这样连接到机器
ssh aws
我同意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进行测试
Generate an SSH key: $ ssh-keygen -t rsa -C <email1@example.com> Generate another SSH key: $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com> Now, two public keys (id_rsa.pub, accountB.pub) should be exists in the ~/.ssh/ directory. $ ls -l ~/.ssh # see the files of '~/.ssh/' directory Create configuration file ~/.ssh/config with the following contents: $ nano ~/.ssh/config Host bitbucket.org User git Hostname bitbucket.org PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa Host bitbucket-accountB User git Hostname bitbucket.org PreferredAuthentications publickey IdentitiesOnly yes IdentityFile ~/.ssh/accountB Clone from default account. $ git clone git@bitbucket.org:username/project.git Clone from the accountB account. $ git clone git@bitbucket-accountB:username/project.git
注意:由于User git指令,你可以省略repo URL的git@部分,像这样缩短你的克隆命令:
$ git clone bitbucket-accountB:username/project.git
这是该指令的唯一目的。如果你不需要它(例如,你总是从网站复制粘贴git克隆命令),你可以把它从配置中去掉。
点击这里查看更多信息