scp Connection closed问题分析
缘起
之前一直可以运行的scp文件拉取脚本不行了,报connect错误:
scp: Connection closed
而服务端并没有做什么限制,其他的客户端拉取是可以的,因此就简单分析了下原因,作为备忘。
折腾过程
是否是防火墙类原因
首先怀疑是客户端和服务端的防火墙限制,导致连接中断。
从服务端日志看到客户端断开的日志:
Received disconnect from xxxx port xx:11: disconnected by user
此时从其他客户端scp拉取,是正常的。
那么就不是服务端改动或防火墙导致,需要从客户端查。
是否客户端限制了连接
使用ssh到远端服务器,是可以正常连接的,而scp是基于ssh的,理论上不应该才对。
scp文件拉取协议问题
通过goolge查找能够ssh但是scp出错,发现相关问题,可以使用-O参数,指定使用ssh协议传输文件。
原因为新版本的openssh,默认使用sftp协议传输文件,而老的服务端不支持,直接就报错了。
因此scp相关命令就写为(注意是大写的O):
scp -O xxx@xxx:ssss/xxx ./
确认根本原因
用scp new version use sftp
关键字查询google,首个结果就明确在openssh9的版本中,默认使用tftp了。
scp命令增加-v
参数,也能看到确实使用了tftp插件传输。
而出现问题的客户端近期升级过系统,在高版本的系统中,openssh是9.x的,因此暴露了这个问题。
总结
有时候报错的表象是不准确的,比如本次报连接错误,其实是客户端和服务端软件的兼容性问题,应该是协议报错才对。
参考文档
https://blog.csdn.net/znanyreason/article/details/138160073
https://wiki.archlinux.org/title/SCP_and_SFTP
https://cloud.tencent.com/developer/article/2378394
发表评论