我使用 ssh 从机器 M1 连接到机器 M2(另一台机器上的同一个用户)。我还应该提到,用户在两台机器上共享同一个密钥。使用密码验证,一切正常;使用公钥验证则不然;我已确保~/.ssh/authorized_keys
M2 上的 RSA 密钥已获得授权,但 ssh 仍然会退回到密码验证。我使用 得到以下结果ssh -vvv
:
debug2: key: /home/joeuser/.ssh/id_rsa (0x7f42679e8200),
debug2: key: /home/joeuser/.ssh/id_dsa ((nil)),
debug2: key: /home/joeuser/.ssh/id_ecdsa ((nil)),
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/joeuser/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: /home/joeuser/.ssh/id_dsa
debug3: no such identity: /home/joeuser/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /home/joeuser/.ssh/id_ecdsa
debug3: no such identity: /home/joeuser/.ssh/id_ecdsa: No such file or directory
debug2: we did not send a packet, disable method
我应该提到我是能够使用来自其他机器的公钥认证进行连接(不使用相同的密钥)。
在这种情况下基于密钥的身份验证失败的潜在原因是什么?
注意:两台机器都是 SLES(SuSE Linux Enterprise Server)11。
答案1
您使用客户端做了正确的事情ssh -vvv
,将其与调试模式下的 sshd 配对,如下所示:
第二个服务器实例:
# /usr/sbin/sshd -p 1234 -dddd
专用客户端连接:
$ ssh -i .ssh/id_rsa-admuser admuser@server -p 1234 -vvvv
在我的案例中,关键信息只打印在客户端上。服务器经历了
debug2: user_key_allowed: check options...
debug2: user_key_allowed: advance ...
debug2: key not found
而客户却提出了这个:
debug1: Next authentication method: publickey
debug1: Offering public key: .ssh/id_rsa-admuser RSA SHA256:<censored> explicit agent
debug1: send_pubkey_test: no mutual signature algorithm
那么这里到底发生了什么事?
服务器太旧了,无法协商辅助算法;密钥也是过时的,但总体来说还不错。
现在的基本方法是什么?
- 在不同的端口上启动专用服务器
- 在新会话中从客户端连接
- 逐步比较双方的密钥交换
- 使用新生成的第二个密钥对验证结果
在这个特定的例子中,有一个明确的解释,即这是一种不安全的旧方法,已经被弃用,即在这里描述。 https://confluence.atlassian.com/bitbucketserverkb/ssh-rsa-key-rejected-with-message-no-mutual-signature-algorithm-1026057701.html
为了能够更新那个旧盒子,我可以通过添加-o PubkeyAcceptedKeyTypes=+ssh-rsa
到客户端上的 ssh 命令行来进行连接。
答案2
检查基本情况:
- id_rsa 和 id_rsa.pub 在 M1 和 M2 上都存在
- id_rsa 在 M1 和 M2 上均具有 600 权限(即只有所有者可以读写)
- authorized_keys 文件将密钥粘贴为一行(无换行符)
- authorized_keys 的权限为 600
- 通常,我的 .ssh 文件夹的权限是 600(默认)
- 检查每个文件夹 /home 直至 .ssh 的权限
- 我知道您想使用 RSA,但请尝试 DSA 密钥,看看它是否有效。如果有效,那么我们将把 SSH 和 RSA 配置归零。
答案3
你得到的错误是
/home/joeuser/.ssh/id_dsa: No such file or directory
确保此文件存在,包含与您添加的公钥相对应的私钥,属于joeuser
并具有600
用户权限:
sudo chown joeuser /home/joeuser/.ssh/id_dsa
sudo chmod 600 /home/joeuser/.ssh/id_dsa
您还应该尝试像这样明确定义私钥:
ssh -i ~/.ssh/id_rsa [email protected]
如果你不确定这是否是正确的密钥,那么我建议创建一个新的 RSA 密钥对
ssh-keygen -b 4096
并将公钥内容添加~/.ssh/id_rsa.pub
到远程服务器的authorized_keys文件中。请确保不要覆盖您仍需要登录其他服务器的现有私钥!