当前位置: 首页>>技术问答>>正文


是否需要将ssh密钥命名为id_rsa?

, ,

问题描述

在使用密钥认证创建构建服务器时,我偶然遇到过这个问题。

我想知道是否有其他人有这方面的经验。我有几个可以连接到不同机器的当前用户的密钥。让我们说machine1和machine2。我已将我的公钥粘贴到其各自的authorized_keys文件中。第一个我命名了第一个关键id_rsa和第二个关键弯。

当我尝试连接到bender时,我使用冗长的ssh连接获得以下输出

debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

它只提供id_rsa键,如上所示。它是否正确?如果是这样,为什我如何获得它提供更多的密钥?我知道这是我间歇性看到的一个问题,因为我在家里有多个键,没有太多麻烦。

我还想知道酒吧和私人钥匙如何与客户端和服务器进行交互。我以为我有一个相当不错的想法,但显然我错过了一些东西。

谢谢,麻烦您了。

最佳解决思路

默认情况下,ssh搜索id_dsaid_rsa文件。这些键不一定要这样命名,您可以将它命名为mykey,或者甚至将它放在不同的目录中。但是,如果您执行其中任何一项,那么您需要在ssh命令中明确引用该键,如下所示:

ssh user@server -i /path/to/mykey

如果一个命令不接受-i,例如sshfs,请使用IdentityFile选项:

sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint

怎么运行的

生成密钥时,您将获得两个文件:id_rsa(私钥)和id_rsa.pub(公钥)。正如他们的名字所暗示的那样,私钥应该保密,公钥可以公开发布。

Public-key身份验证适用于公钥和私钥。客户端和服务器都有自己的密钥。安装openssh-server时,会自动生成服务器公钥和私钥。对于客户,你必须自己做。

当你(客户端)连接服务器时,公钥会被交换。你会收到一台服务器,以及你的服务器。您第一次收到服务器公钥时,系统会要求您接受它。如果此公钥一段时间内发生变化,您将被警告,因为可能发生了MITM(中间人攻击)攻击,拦截客户端和服务器之间的流量。

服务器检查是否允许您连接(在/etc/ssh/sshd_config中定义)以及您的公钥是否在~/.ssh/authorized_keys文件中列出。公钥被拒绝的可能原因:

  • /etc/ssh/sshd_config

    • AllowUsersAllowGroups已指定,但您的服务器用户未列在组或用户列表中(默认未定义,对登录的用户或组没有限制)。

    • 指定了DenyUsersDenyGroups,并且您位于用户或组列表中。

    • 您尝试以超级用户身份登录,但PermitRootLogin已设置为No(默认yes)。

    • PubkeyAuthentication设置为No(默认yes)。

    • AuthorizedKeysFile被设置为不同的位置,并且公钥不会被添加到该文件(默认.ssh/authorized_keys,相对于主目录)

  • ~/.ssh/authorized_keys:您的公钥没有添加到该文件中(请注意,此文件是以root用户身份读取的)

使用多个键

使用多个密钥并不罕见。您可以使用配置文件~/.ssh/config而不是运行ssh user@host -i /path/to/identity_file

常用设置是IdentityFile(密钥)和端口。仅当与ssh youruser@yourhost连接时,下一个配置将检查”id_dsa”和”bender”:

Host yourhost
   IdentityFile ~/.ssh/id_dsa
   IdentityFile ~/.ssh/bender

如果您省略Host yourhost,则这些设置将应用于所有SSH连接。还可以为此主机匹配指定其他选项,例如User youruserPort 2222等。这可让您使用简写ssh yourhost而不是ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender

次佳解决思路

我最喜欢的方法允许自动选择私钥

IdentityFile ~/.ssh/%l_%r@%h_id_rsa

SSH将用本地机器名替换%l,用远程用户名替换%r,用远程主机替换%h,因此如果我想从我的机器以foo连接到用户,我运行:

ssh bar

而ssh会自动使用:

~/.ssh/foo_user@bar_id_rsa

由于本地主机也被存储,所以这允许通过NFS共享主目录(每台机器使用不同的密钥!),甚至可以识别密钥本来应该在哪台机器上……

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/564.html,未经允许,请勿转载。