我在我们的一台服务器上编译了 OpenSSH_6.6p1。我可以通过 SSH 登录到升级后的服务器。但是我无法从这里连接到其他运行 OpenSSH_6.6p1 或 OpenSSH_5.8 的服务器。连接时出现如下错误。
Read from socket failed: Connection reset by peer
在日志中的目标服务器上,我看到它如下所示。
sshd: fatal: Read from socket failed: Connection reset by peer [preauth]
我尝试指定cipher_spec [ ssh -c aes128-ctr destination-server ],如ssh 'connection reset by peer' 自 5.8p1(存档版本)以来的问题中所述,并且能够连接。如何配置 ssh 以默认使用密码?为什么这里需要密码?
这个问题听起来像是一个服务器端的错误。当客户端发送密码列表时,openssh 服务器可能希望能够在单个系统调用中读取该列表。
如果支持的密码列表长于一个数据包中可以传输的长度,则服务器在第一次调用中获得的字节数可能比预期的要少。服务器上的正确行为是执行另一个调用以获取其余字节。但是从出现的问题描述来看,服务器在没有立即获得完整的密码列表时关闭了连接。当来自客户端的下一个数据包到达时,服务器将向客户端发送连接重置。
然后将客户端配置为使用较短的密码列表将解决该错误。openssh 客户端将在以下位置查找密码列表:
这两个配置文件分别是每个用户和系统范围的设置。
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
像 Eric 建议的那样使用应该可以正常工作。您可以在 ssh 配置文件(/etc/ssh/ssh_config 或类似文件,取决于 $PREFIX 等)中指定密码。您在命令行上传递给 ssh 客户端的任何选项都可以在 ssh(客户端)配置文件中设置。
这是相关行(只是取消注释):
我的解决方法,希望它可以帮助某人:
通过添加值来编辑 sshd_config
通过取消注释值来编辑 ssh_config
通过将以下文件权限修改为 600 解决了此问题。
还将“/etc/ssh/”中所有其他文件的权限修改为 644。所有文件文件必须由“root”拥有。
以下是为“/etc/ssh”目录下的所有文件分配适当权限的完整命令集:
我的问题与您看到的完全相同的症状是由于主机密钥被截断所致。尝试使用以下方法重新创建它们: