You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:SSH远程执行指定脚本后保持与目标主机连接的可行性及实现方法

实现SSH执行远程命令后保持连接的方法

当然可行!你完全可以做到执行完远程脚本后仍保持与host2的SSH连接,下面分享几个实用的解决方案:

方法1:在远程命令后追加交互式Shell

原来的命令执行完脚本就直接退出,是因为SSH在完成指定命令后就会终止连接。我们只需要在脚本执行命令后,额外启动一个交互式Shell即可:

var=ntpcz
ssh host2 "/oracle/remote/xyz.sh $var; exec bash"

这里的exec bash会替换当前的进程为bash(如果你的默认Shell是zsh等其他类型,替换成对应的exec zsh即可),脚本执行完成后就会自动进入host2的交互Shell,直到你主动输入exit才会断开连接。

方法2:使用-t参数强制分配伪终端

如果遇到追加Shell后无法正常交互(比如无法使用上下键调用历史命令、无法打开交互式编辑器),可以加上SSH的-t参数强制分配伪终端,让后续的Shell交互更完整:

var=ntpcz
ssh -t host2 "/oracle/remote/xyz.sh $var; exec bash"

这个参数在需要交互操作的场景下特别有用,能模拟本地终端的体验。

方法3:将脚本加入远程Shell的初始化配置(适合固定场景)

如果你需要每次连接host2都自动执行这个脚本,还可以把执行命令添加到远程用户的Shell初始化文件中(比如~/.bashrc或~/.profile),但要注意只在交互式Shell中执行,避免影响非交互场景:
在host2上编辑~/.bashrc,添加以下内容:

# 仅在交互式Shell中执行脚本
if [[ $- == *i* ]]; then
    /oracle/remote/xyz.sh ntpcz
fi

之后你直接执行ssh host2,连接后脚本会自动执行,执行完成后保持交互式Shell连接。不过这个方法更适合脚本参数固定的场景,如果var是动态变化的,还是前两种方法更灵活。

补充说明

你之前的命令执行完就断开,本质是因为SSH的工作机制:当你指定远程命令时,SSH会在该命令执行结束后立即关闭连接。而上面的方法都是在脚本执行完成后,启动一个持续运行的交互式Shell进程,让SSH保持连接直到你主动终止这个Shell。

内容的提问来源于stack exchange,提问作者sarat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:12:41