我的大学可以访问一些我在家无法访问的学术期刊。为了能够在我离开时下载论文,我当前的流程是:
创建到我的大学计算机的 ssh 隧道
ssh -D 12345 [email protected]
使用我配置为使用该隧道作为代理的单独配置文件启动 Firefox 的新实例:
firefox -P uniprofile -no-remote
。这样我仍然可以打开其他不会向我的大学发送流量的窗口。下载完论文后,我退出 Firefox 并关闭 ssh 连接。
我不明白的是如何将所有这些捆绑到一个脚本中,以便我可以创建一个桌面启动器来设置隧道(提示我输入密码),完成后启动 firefox,然后关闭 ssh当我关闭 Firefox 窗口时连接。我的第一次尝试是简单地使用 ssh 命令创建一个脚本,然后使用 firefox 命令,但最终发生的情况是,firefox 仅在我关闭 ssh 连接后才启动。
#!/bin/bash
set -e
ssh -D 12345 [email protected]
firefox -P uniprofile -no-remote
#...and at this point find a way to close the ssh connection...
答案1
这是未经测试的(因为我不使用 GUI),但试试这个:
#!/bin/bash
# From this answer http://unix.stackexchange.com/a/29949/82289
[email protected]
ssh -f -N -D 12345 -M -S /tmp/ssh_tunnel_%h.sock -o ExitOnForwardFailure=yes $SSH_HOST && \
echo "ssh tunnel started successfully" || \
echo "ssh tunnel failed to start"
# Launch firefox
firefox -P uniprofile -no-remote
# We should only get here after firefox closes
# Close the ssh tunnel socket
ssh -S /tmp/ssh_tunnel_%h.sock -O exit $SSH_HOST
# End shell-script
这 2 个标志-f
和-N
是我认为你想要的(来自 人 ssh)。
-F
请求 ssh 在命令执行之前进入后台。如果 ssh 要求输入密码或密码短语,但用户希望它在后台运行,那么这非常有用。这意味着-n。在远程站点启动 X11 程序的推荐方法是使用 ssh -f host xterm 之类的命令。
-N
不要执行远程命令。这对于仅转发端口很有用(仅限协议版本 2)。
答案2
或者,如果您在该计算机上安装了 Firefox,则可以打开 Firefox 并将其显示在您的计算机上,如下所示:
跑步:
export DISPLAY=:0.0;
ssh -Y [email protected]
然后,当 SSH 连接建立后,只需在该机器上运行 firefox:
firefox