如何从本地远程执行服务器脚本?解决SSH登录后命令中断问题
解决本地压缩文件传输至服务器后自动解压的问题
你当前脚本的问题在于:ssh user@server会启动交互式远程会话,后续的cd、rm等命令会在你退出远程会话后本地执行,完全达不到远程操作的目的。要让命令在服务器端执行,需要把这些远程操作命令作为参数传递给ssh,让它批量远程执行,而非进入交互模式。
修改后的完整脚本
# 本地压缩目标文件夹 tar -czvf targetfolder.tar.gz targetfolder echo "zipped targetfolder; moving to server" # 将压缩包传输至服务器用户主目录 scp targetfolder.tar.gz user@server: # 远程执行服务器端的一系列操作 ssh user@server ' cd ~/targetfolderonserver && \ rm -rf targetfolder && \ mv ~/targetfolder.tar.gz ./ && \ tar -xf targetfolder.tar.gz ' # 可选:传输完成后删除本地压缩包 # rm targetfolder.tar.gz
关键说明
- 用单引号包裹所有远程命令,确保本地Shell不会解析命令中的特殊字符(如
~、变量),直接完整传递给远程服务器执行。 - 用
&&连接每个命令,保证前一个命令执行成功后才会执行下一个,避免某一步出错后后续操作继续执行引发问题。
更高效的优化方案(无需本地生成压缩包)
可以通过管道直接在传输过程中完成压缩和解压,节省本地磁盘空间和传输时间:
echo "Transferring and extracting targetfolder to server" tar -czf - targetfolder | ssh user@server ' cd ~/targetfolderonserver && \ rm -rf targetfolder && \ tar -xzf - '
内容的提问来源于stack exchange,提问作者lifezbeautiful
相关产品推荐
相关产品推荐

