无法建立 ssh 连接:“debug1:read_passphrase:无法打开/dev/tty:没有这样的文件或目录”和“主机密钥验证失败。”

无法建立 ssh 连接:“debug1:read_passphrase:无法打开/dev/tty:没有这样的文件或目录”和“主机密钥验证失败。”

我无法与我的一台远程服务器建立 ssh 连接。

我有两者的地址、用户名和密码。

如下创建 ssh 连接,ssh user@server这会给我以下错误Host key verification failed.

这个话题最常见的答案是运行ssh-keygen -R hostname。问题出在我的远程服务器上,我的权限非常有限,它给了我错误ssh-keygen: command is not found。通常像serviceor suall 这样的命令会给我同样的错误command is not found

由于我能够通过 SFTP 与 Filezilla 创建连接,我可以手动修复此问题吗?另外,如果重要的话,我的.ssh目录是空的,所以没有known_host或类似的东西。

这是完整的输出ssh -v user@server

OpenSSH_6.6.1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Connecting to XXX port 22.
debug1: Connection established.
debug1: identity file /.ssh/id_rsa type -1
debug1: identity file /.ssh/id_rsa-cert type -1
debug1: identity file /.ssh/id_dsa type -1
debug1: identity file /.ssh/id_dsa-cert type -1
debug1: identity file /.ssh/id_ecdsa type -1
debug1: identity file /.ssh/id_ecdsa-cert type -1
debug1: identity file /.ssh/id_ed25519 type -1
debug1: identity file /.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.7p1Debian-5+deb8u4
debug1: match: OpenSSH_6.7p1 Debian-5+deb8u4 pat OpenSSH* compat 0x04000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr [email protected] none
debug1: kex: client->server aes128-ctr [email protected] none
debug1: kex: [email protected] need=20 dh_need=20
debug1: kex: [email protected] need=20 dh_need=20
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: RSA XXX
debug1: read_passphrase: can't open /dev/tty: No such file or directory
Host key verification failed.

我使用 Windows PCssh通过 PuTTy 连接到远程服务器(我们称之为服务器 1)。在服务器 1 上,我几乎没有权限运行除scpssh以及基本 shell 命令之外的任何内容。在此服务器上,我运行一个网上商店,其备份应在另一台服务器(我们称之为服务器 2)上停止。

我希望可以使用sftp,但我无法使用它,也无法在服务器 1 上安装它。所以我不得不使用scp。我尝试了它,curl sftp://xxx.xxx令我惊讶的是它确实有效,但仍然出现新的错误curl: (51) SSL peer certificcate or SSH remote key was not ok

答案1

Host key verification failed错误消息意味着您的 SSH 客户端已比较接收到的远程服务器的公钥,发现它与~/.ssh/known_hosts文件中存储的主机密钥版本不匹配。

该命令ssh-keygen -R hostname不会对远程主机执行任何操作,也不需要任何特殊权限:它所做的只是删除旧主机hostname密钥你当地的 known_hosts文件。然后,下次连接到 时hostname,您的 SSH 客户端将显示 的当前主机密钥的指纹hostname,并提示您接受它。就像第一次连接到某个主机时一样。

但如果您没有可用的命令,您可以尝试连接

ssh -o StrictHostKeyChecking=no user@server

StrictHostKeyChecking该选项的默认值为ask,它会提示您接受或拒绝以前未知的主机密钥...但由于您的会话显然没有伪 TTY,因此ssh客户端处于非交互模式并且不会提示。该值no应自动接受主机密钥:如果可能,ssh会将主机密钥写入~/.ssh/known_hosts文件。如果成功,则-o StrictHostKeyChecking=no仅在首次连接到特定服务器时才需要使用该选项。

答案2

当我尝试从运行自定义构建的 buildroot rootfs 的主机通过 SSH 连接到远程计算机时,我遇到了这个问题。

我观察到的是,回显的错误消息“主机密钥验证失败”对于我遇到的情况具有误导性。它实际上不是关于known_hosts文件,而是关于ssh想要做的回显(如下所示)

此密钥未被任何其他名称识别 您确定要继续连接吗(是/否/[指纹])?

为此,它需要 /dev/tty,但无法找到/写入,因此出现错误

read_passphrase:无法打开/dev/tty:没有这样的文件或目录

所以我们需要修复这个问题,以便我们可以在控制台中键入“yes”,然后 ssh 可以将主机密钥添加到known_hosts。

对我有用的解决方案是删除 /dev/tty 并将当前 tty 软链接到它。

console=`tty`
ln -s $console /dev/tty

相关内容