在使用密钥身份验证创建构建服务器时,我曾多次遇到过这个问题。
我想知道是否有其他人有过这种经历。我的当前用户有几个键可以连接到不同的机器。假设机器1和机器2。我已将我的公钥粘贴到他们各自的 authorized_keys 文件中。第一个我命名为第一个键 id_rsa 和第二个键弯曲器。
当我尝试连接到弯曲机时,我通过详细的 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 密钥。这个对吗?如果是,为什么?我如何让它提供更多的钥匙?我知道这是我间歇性看到的问题,因为我在家里我有多个钥匙,没有太多麻烦。
我还希望了解有关 pub 和私钥如何与客户端和服务器交互的概述。我以为我有一个不错的主意,但显然我错过了一些东西。
谢谢,麻烦您了。
默认情况下,SSH 搜索
id_rsa
、id_cdsa
、id_ecdsa_sk
、id_ed25519
、id_ed25519_sk
和id_dsa
文件。键不必像这样命名,您也可以将其命名mykey
,甚至将其放在不同的目录中。但是,如果您执行其中任何一项,则需要在 ssh 命令中显式引用密钥,如下所示:如果命令不接受
-i
,例如sshfs
,使用IdentityFile
选项:这个怎么运作
生成密钥时,您将获得两个文件:(
id_rsa
私钥)和id_rsa.pub
(公钥)。正如他们的名字所暗示的,私钥应该保密,公钥可以向公众发布。公钥身份验证使用公钥和私钥。客户端和服务器都有自己的密钥。安装
openssh-server
服务器时,会自动生成公钥和私钥。对于客户,你必须自己做。当您(客户端)与服务器连接时,会交换公钥。您将收到一台服务器,以及您的服务器。第一次收到服务器公钥时,系统会要求您接受它。如果此公钥在一段时间内发生更改,您将收到警告,因为可能正在进行 MITM(中间人)攻击,拦截客户端和服务器之间的流量。
服务器检查您是否被允许连接(在 中定义
/etc/ssh/sshd_config
)以及您的公钥是否列在~/.ssh/authorized_keys
文件中。公钥被拒绝的可能原因:/etc/ssh/sshd_config
:AllowUsers
或AllowGroups
指定,但您的服务器用户未列在组或用户列表中(默认未定义,对用户或组登录没有限制)。DenyUsers
orDenyGroups
被指定并且您在用户或组列表中。PermitRootLogin
设置为No
(defaultyes
)。PubkeyAuthentication
设置为No
(默认yes
)。AuthorizedKeysFile
设置为不同的位置,并且公钥不会添加到该文件中(默认.ssh/authorized_keys
,相对于主目录)~/.ssh/authorized_keys
:您的公钥未添加到此文件中(请注意,此文件以 root 用户身份读取)使用多个键
使用多个键并不少见。
ssh user@host -i /path/to/identity_file
您可以使用配置文件,而不是运行~/.ssh/config
.常见设置是 IdentityFile(密钥)和端口。下一个配置将仅在连接时检查“id_dsa”和“bender”
ssh youruser@yourhost
:如果省略
Host yourhost
,则设置将应用于所有 SSH 连接。还可以为此主机匹配指定其他选项,例如User youruser
,Port 2222
等。这将允许您使用速记ssh yourhost
而不是ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender
.我最喜欢的方法允许自动选择私钥
SSH 将用本地机器名替换 %l,用远程用户名替换 %r,用远程主机替换 %h,因此,如果我想以用户身份从名为 foo 的机器连接到 bar,我运行:
ssh 会自动使用:
由于本地主机也被存储,这允许通过 NFS 共享主目录(每台机器不同的密钥!)甚至识别密钥应该在哪台机器上......
考虑到 StevenRoose 的评论,即指定许多键需要更长的时间,而且我碰巧在玩很多键,我想建议我的个人解决方案。
我创建了一个指向我当时想要使用的密钥的符号链接,并且由于它只是根据我正在处理的项目而很少更改,因此我对此感到满意。
在这里,我已链接到在 virtualbox 下运行的机器的密钥:
还可以添加一个非常快速的脚本来切换到另一组,而无需再次手动键入ln命令。
同样,这不仅仅是两个键的解决方案,但对于更多的键,它可能是可行的。