SSH连接成功后执行SCP上传DLL立即报lost connection故障求助
故障原因及排查解决方法
核心故障原因
结合脚本逻辑和Windows远程主机的场景,常见诱因如下:
- 第一条ssh命令中powershell调用方式错误:直接执行
powershell.exe不加参数会启动交互式powershell会话,无法自动执行后续的停止服务脚本,甚至会导致ssh会话异常残留,影响后续scp连接建立 - scp目标路径包含空格未做嵌套转义:当前仅在本地对路径加了双引号,远程sshd解析路径时仍然会按空格截断,导致访问不存在的路径触发连接中断
- 远程路径权限/存在性问题:目标路径
/Bin/File Watcher Service不存在,或者DLL_Uploader用户对该路径没有写入权限,会触发scp主动断开连接
排查解决步骤
修正ssh命令的powershell调用逻辑
执行单条powershell命令需要添加-Command参数,无需额外添加exit语句,powershell执行完指定命令后会自动退出:ssh -p 29170 DLL_Uploader@XXX.XXX.XX.XXX "powershell.exe -Command '.\stop_file_watcher.ps1'"执行后可添加
echo $?验证命令返回值,返回0说明停止服务操作执行成功。修正scp的路径转义规则
对包含空格的远程路径添加单引号嵌套,避免远程解析时路径被截断:scp -P 29170 $1 "DLL_Uploader@XXX.XXX.XX.XXX:'/Bin/File Watcher Service'"也可以直接转义空格:
scp -P 29170 $1 DLL_Uploader@XXX.XXX.XX.XXX:/Bin/File\ Watcher\ Service单独验证scp链路
暂时注释掉前后两条ssh命令,直接运行带-vvv参数的scp命令:- 若认证阶段就断开:检查DLL_Uploader用户的密钥/密码配置是否正确,远程sshd是否允许该用户登录
- 若认证通过后断开:登录远程主机确认
/Bin/File Watcher Service路径存在,且DLL_Uploader用户对该路径有写入权限,同时检查远程sshd配置中的sftp子系统配置是否正常。
修正完整脚本
最终调整后的脚本参考:# 停止服务 ssh -p 29170 DLL_Uploader@XXX.XXX.XX.XXX "powershell.exe -Command '.\stop_file_watcher.ps1'" if [ $? -ne 0 ]; then echo "停止服务失败,终止后续操作" exit 1 fi # 上传DLL scp -P 29170 $1 "DLL_Uploader@XXX.XXX.XX.XXX:'/Bin/File Watcher Service'" if [ $? -ne 0 ]; then echo "DLL上传失败" exit 1 fi # 启动服务 ssh -p 29170 DLL_Uploader@XXX.XXX.XX.XXX "powershell.exe -Command '.\start_file_watcher.ps1'"
内容的提问来源于stack exchange,提问作者jack gallerdude galler
相关产品推荐
相关产品推荐

