我有一个脚本文件./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
,您的脚本就会出现在远程服务器上。
您可以将标志传递-fN
给ssh
(-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
如果需要的话,您可以稍后终止该进程。