ssh 隧道后在本地执行命令

ssh 隧道后在本地执行命令

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

ssh -L 8888:localhost:8888 ubuntu@address
./run_website.sh   # it should be executed locally

但它尝试在远程机器上运行第二行。实际上,我想在我的电脑上运行它。有什么想法吗?

答案1

您好,欢迎成为超级用户。

之后ssh -L 8888:localhost:8888 ubuntu@address,您的脚本就会出现在远程服务器上。

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

然后,隧道建立后,你的脚本将在下一行恢复执行在你的机器上

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

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

ssh -f -L 8888:localhost:8888 ubuntu@address sleep 10

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

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

如果您不关心自动终止隧道,那么继续使用-fN

ssh -fN -L 8888:localhost:8888 ubuntu@address

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

相关内容