我在我们的一台服务器上编译了 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]
我尝试指定密码规范[ ssh -c aes128-ctr 目标服务器 ] 如上所述自 5.8p1 以来,ssh‘对端重置连接’问题(存档版本) 并能够连接。如何配置 ssh 以默认使用密码?为什么这里需要密码?
答案1
这个问题听起来像是服务器端的一个错误。当客户端发送密码列表时,openssh 服务器可能希望能够在单个系统调用中读取该列表。
如果支持的密码列表比一个数据包中可以传输的长度要长,则服务器在第一次调用中得到的字节数可能比预期的要少。服务器上的正确行为是执行另一个调用以获取剩余的字节数。但从问题描述来看,服务器在未立即获得完整的密码列表时反而会关闭连接。当来自客户端的下一个数据包到达时,服务器将向客户端发送连接重置。
配置客户端使用较短的密码列表即可解决该问题。openssh 客户端将在以下位置查找密码列表:
- 在命令行上使用 -c cipher_spec 或 -o Ciphers=cipher_spec
- 在 ~/.ssh/config 中,通过在相关主机部分或在第一个主机之前指定密码 cipher_spec。
- 在 /etc/ssh/ssh_config 中使用与 ~/.ssh/config 相同的格式
- 编译时内置于客户端的默认列表。
这两个配置文件分别是针对每个用户和系统范围的设置。Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
按照 Eric 的建议使用应该没问题。
答案2
您可以在 ssh 配置文件 (/etc/ssh/ssh_config 或类似文件,取决于 $PREFIX 等) 中指定密码。您在命令行上传递给 ssh 客户端的任何选项都可以在 ssh (客户端) 配置文件中设置。
以下是相关行(只需取消注释):
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
答案3
我的方式修复它,希望它能帮助别人:
# Recreate host keys
sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A
# Re-install SSh
sudo apt-get --reinstall install openssh-server openssh-client
通过添加值来编辑 sshd_config
add : MaxAuthTries 3
通过取消注释值来编辑 ssh_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
答案4
我的问题与您看到的症状完全相同,这是由于主机密钥被截断造成的。尝试使用以下命令重新创建它们:
sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A