协慌网

登录 贡献 社区

在一个客户端上使用多个 SSH 私钥的最佳方法

我想使用多个私钥连接到不同的服务器或同一服务器的不同部分(我的用途是服务器的系统管理,Git 的管理,以及同一服务器内的正常 Git 使用)。我试过简单地堆叠id_rsa文件中的密钥无济于事。

显然,一种直接的方法是使用该命令

ssh -i <key location> [email protected]

这非常麻烦。

关于如何更轻松地做这件事的任何建议?

答案

从我的.ssh/config

Host myshortname realname.example.com
    HostName realname.example.com
    IdentityFile ~/.ssh/realname_rsa # private key for realname
    User remoteusername

Host myother realname2.example.org
    HostName realname2.example.org
    IdentityFile ~/.ssh/realname2_rsa  # different private key for realname2
    User remoteusername

等等。

您可以指示 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请求密码,即使它有一个密码。

当然,它不像其他答案那样超出每服务器配置,但至少你不必为你连接的所有服务器添加配置!

兰德尔施瓦茨答案几乎帮助了我。我在服务器上有不同的用户名,所以我必须将User关键字添加到我的文件中:

Host           friendly-name
HostName       long.and.cumbersome.server.name
IdentityFile   ~/.ssh/private_ssh_file
User           username-on-remote-machine

现在您可以使用友好名称进行连接:

ssh friendly-name

可以在OpenSSH 手册页上找到更多关键字。 注意:列出的某些关键字可能已存在于/ etc / ssh / ssh_config文件中。