发送命令时 SSH 因主机密钥错误而失败,但没有主机密钥也可以工作

发送命令时 SSH 因主机密钥错误而失败,但没有主机密钥也可以工作

我正在设置一个服务器,以便能够支持带有主机密钥身份验证的 SSH,该服务器目前由一台旧的濒临崩溃的服务器处理。截至目前,我可以成功连接 SSH 并像往常一样在终端中交互。但是,如果我包含命令或将 SSH 放入 RSync 命令中,我会收到错误“主机密钥验证失败”。

因此这个命令有效:

ssh -o StrictHostKeyChecking=no -i /cygdrive/C/keys/id_rsa [email protected]

但以下情况则不然:

ssh -o StrictHostKeyChecking=no -T -i /cygdrive/C/keys/id_rsa [email protected] ssh 192.168.0.2 mkdir -p /mnt/storage/new_folder

但是它们在指向旧服务器时都可以工作,因此命令本身应该没问题。此外,如果我能设法不更改命令,它将允许我们向后兼容。

我将新服务器上的 sshd_config 设置(设置为模仿旧服务器)包含在内,以防它们有帮助,这里唯一的项目是那些没有被注释掉的项目。

HostbasedAuthentication 否
RhostsRSAAuthentication 否
PermitEmptyPasswords 否
ChallengeResponseAuthentication 否
UsePAM 是
X11Forwarding 是
PrintMotd否
PrintLastLog 是
TCPKeepAlive 是
AcceptEnv LANG LC_*
子系统 sftp /usr/lib/openssh/sftp-server
PubkeyAuthentication 是
RSAAuthentication 是
LoginGraceTime 2m
PermitRootLogin 是
StrictModes 是

新服务器是 Ubuntu 17.10(下一个版本发布时将更新为 LTS)。旧服务器是 Debian 6.0.6。

编辑:忘记提了,当我使用带有“-e”的 RSync 时也会出现此错误。但是我发现在 RSync 命令中,我可以通过[email protected]:/mnt/storage/new_folder远程路径参数来修复此问题。如果我删除“username@”,则会再次收到错误。同样,失败的版本在旧服务器上运行良好,仅在新服务器上失败。还请记住这是遗留代码,因此如果我可以让旧命令按原样工作,它将为我节省大量推送更新的时间。

答案1

好的,您正在主机 A(未指定)上,当您运行命令 1 时:

ssh -o StrictHostKeyChecking=no -i /cygdrive/C/keys/id_rsa [email protected]

然后在主机 B (192.168.0.2) 上获得一个交互式 shell。但是当您运行命令 2 时:

ssh -o StrictHostKeyChecking=no -T -i /cygdrive/C/keys/id_rsa [email protected] ssh 192.168.0.2 mkdir -p /mnt/storage/new_folder

(来自主机 A),您会收到错误。

好的,从主机 A 运行命令 1,并在主机 B 上获取交互式 shell。现在,在主机 B 上运行命令 2b:

ssh 192.168.0.2 mkdir -p /mnt/storage/new_folder

会发生什么?如果这也失败了,那么您的问题就不是“发送命令时 SSH 因主机密钥错误而失败,但没有密钥却可以工作”,您的问题是主机 B 无法 ssh 到自身 — 或者更具体地说,主机 B 上的“用户”未配置为能够 ssh 到主机 B。

并且,为了完整起见,如果您运行命令 2c,会发生什么情况:

ssh -o StrictHostKeyChecking=no -T -i /cygdrive/C/keys/id_rsa [email protected]  mkdir -p /mnt/storage/new_folder

(来自主持人 A)?

相关内容