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


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。