ssh隧道后在本地执行命令

Sup*_*net 2 linux ssh script ubuntu

我有一个脚本文件./run_app.sh,其中包含以下内容:

ssh -L 8888:localhost:8888 ubuntu@address
./run_website.sh   # it should be executed locally
Run Code Online (Sandbox Code Playgroud)

但它试图在远程机器上运行第二行。实际上,我想在我的电脑上运行它。任何的想法?

Mr *_*unz 5

您好,欢迎使用超级用户。

之后ssh -L 8888:localhost:8888 ubuntu@address,您的脚本会在远程服务器上找到自己。

您可以将标志传递-fNssh(-f用于fork 到后台并且-N运行命令)。

然后,在隧道建立后,您的脚本将在您机器的下一行继续执行。

缺点是即使脚本完成后ssh连接仍将保留在后台。

解决方法是放弃-N标志并sleep 10在远程服务器上执行:

ssh -f -L 8888:localhost:8888 ubuntu@address sleep 10
Run Code Online (Sandbox Code Playgroud)

这样,如果没有使用隧道,无论是在run_website.sh终止时还是在 10 秒后脚本不使用隧道(即由于某种原因失败),它将自动断开连接。

这显然假设run_website.sh使用隧道。

如果您不关心自动终止隧道,请继续并简单地使用-fN

ssh -fN -L 8888:localhost:8888 ubuntu@address
Run Code Online (Sandbox Code Playgroud)

ssh如果需要,您可以稍后终止该进程。