Windows系统执行SCP文件传输操作时返回异常响应问题咨询
根因分析
- 该报错和SCP命令本身无关,问题出在远程Linux服务器的用户Shell配置文件。SCP通过SSH建立非交互式会话执行文件传输时,默认不会初始化
TERM环境变量,也不允许SSH会话向标准输出返回额外的非协议内容。 - 你重装服务器后修改了matt用户的Shell启动配置(常见如
~/.bashrc、~/.zshrc、/etc/profile全局配置),配置中加入了依赖终端交互的命令(如tput、clear、命令行提示符自定义逻辑),或是主动向标准输出打印内容(如自定义登录欢迎语),非交互式会话运行这些逻辑时就会触发TERM environment variable not set报错,额外的输出内容还会被SCP识别为乱码。 - 首次上传公钥时你尚未修改远程服务器的Shell配置,因此操作正常。
解决方案
- 先通过普通SSH方式登录到远程服务器,编辑对应用户的Shell启动配置文件,以Bash为例:
vim ~/.bashrc
- 在配置文件的最开头添加交互式会话判断逻辑,非交互式会话直接退出不执行后续配置:
# 非交互式会话跳过后续配置 if [ -z "$PS1" ]; then return fi
- 若你确实需要保留部分依赖
TERM的配置逻辑,可额外增加TERM变量存在性判断:
if [ -n "$TERM" ]; then # 此处放置原本需要TERM变量的自定义命令 tput setaf 2 echo "欢迎登录" fi
- 保存配置文件并退出,重新执行SCP命令即可正常传输文件。
内容的提问来源于stack exchange,提问作者Matt Stone
相关产品推荐
相关产品推荐

