先描述下情况:
线上有2个服务器A和B,在A服务器上运行了一个服务,定时将指定的文件通过scp拷贝到B服务器,通过观察日志发现偶发有scp处理的失败的信息
错误信息为 ssh_exchange_identification: Connection closed by remote host
通过查看代码更新记录,发现不久前将这个服务拷贝文件从单线程该为多线程,之后就出现了scp偶发失败的问题,经各种排查最终找到原因。
解决方法:
修改 /etc/ssh/sshd_config 中的MaxStartups 参数为一个比较大的值,我目前设置为500,这个可根据实际情况设置。
MaxStartups 此参数的含义为最大允许保持多少个未认证的连接,默认值是 10
因为scp也是走ssh通道进行传输的,故当使用多线程进行拷贝文件时会偶发出现未认证连接数超出限制,从而造成scp执行失败。