![脚本自动关闭 SSH 隧道并捕获分配的端口号](https://linux22.com/image/743931/%E8%84%9A%E6%9C%AC%E8%87%AA%E5%8A%A8%E5%85%B3%E9%97%AD%20SSH%20%E9%9A%A7%E9%81%93%E5%B9%B6%E6%8D%95%E8%8E%B7%E5%88%86%E9%85%8D%E7%9A%84%E7%AB%AF%E5%8F%A3%E5%8F%B7.png)
脚本会使用如下简单命令在后台自动创建 SSH 隧道,其工作原理如下:
ssh -R 19000:localhost:22 [email protected] -i ~/.ssh/keyfile &
这个答案描述了如何设置动态分配的端口并重定向 SSH 的输出,以便我的脚本可以捕获该端口。它也可以工作:
ssh -R 0:localhost:2222 [email protected] -i ~/.ssh/keyfile 3>&1 1>&2 2>&3 | sed -n "s/^Allocated port \([0-9]*\) for/port \0/p" > portfile.txt &
分别地,本文建议一种让隧道在特定时间后自动关闭的方法,该方法也可以单独运行:
ssh -R 19000:localhost:22 [email protected] -i ~/.ssh/keyfile sleep 10;
现在我想把它们合并成一行但在我的睡眠命令执行之前隧道就崩溃了:
(ssh -R 0:localhost:22 [email protected] -i ~/.ssh/keyfile 3>&1 1>&2 2>&3 "sleep 1" | sed -n "s/^Allocated port \([0-9]*\) for remote forward to localhost:2222/\1/p" > portfile.txt); sleep 10 &
输出被重定向并且端口号按预期写入文件,但隧道立即关闭并且睡眠命令运行。
请有人解释一下我在这个命令中做了什么/做错了什么,以及为什么它不起作用?
答案1
尝试将初始 SSH 隧道发送到后台。添加这些选项“-fN”