我在我们的一台服务器上编译了OpenSSH_6.6p1。 我可以通过SSHlogin升级的服务器。 但是我无法连接到运行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目标服务器],如上所述,并能够连接。 如何configurationSSH默认使用密码? 为什么这里需要密码?
这个问题听起来像是服务器端的错误。 当客户端发送密码列表时,openssh服务器可能希望能够在单个系统调用中读取列表。
如果受支持的密码列表长于可以在一个数据包中传输的时间,则服务器可能会在第一次调用中获得比预期更less的字节。 服务器上的正确行为是执行另一个调用来获取剩余的字节。 但是从问题描述中可以看出,当服务器一次没有得到完整的密码列表时,服务器会closures连接。 当来自客户端的下一个数据包到达时,服务器将发送连接重置给客户端。
configuration客户端使用更短的密码列表将解决这个错误。 openssh客户端将在以下位置查找密码列表:
这两个configuration文件分别是每个用户和系统范围的设置。 使用Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc像Ericbuild议的Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc应该可以正常工作。
你可以在sshconfiguration文件中指定密码(/ etc / ssh / ssh_config或类似的,取决于$ PREFIX等)。 你在命令行传递给SSH客户端的任何选项都可以在ssh(客户端)configuration文件中设置。
这里是相关的行(只是取消注释):
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
我的方法来解决它,希望它可以帮助别人:
# 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
通过将以下文件权限修改为600来解决此问题。
的/ etc / SSH / ssh_host_dsa_key
的/ etc / SSH / ssh_host_rsa_key
的/ etc / SSH / ssh_host_ecdsa_key
还将“/ etc / ssh /”中所有其他文件的权限修改为644.所有文件必须由“root”拥有。
以下是为“/ etc / ssh”目录下的所有文件分配适当权限的完整命令集:
chown root:root / etc / ssh / * chmod 644 / etc / ssh / *
chmod 600 / etc / ssh / ssh_host_dsa_key
chmod 600 / etc / ssh / ssh_host_rsa_key
chmod 600 / etc / ssh / ssh_host_ecdsa_key
我遇到的问题与您看到的完全相同,是由于截断的主机密钥。 尝试重新创build它们:
sudo rm /etc/ssh/ssh_host_* sudo ssh-keygen -A