我想写一个bash
脚本,允许我连接可能位于firewall
或NAT
后面的设备(不知何故无法直接连接)。在某些情况下,我的脚本应该建立与myserver(具有公共IP)的反向ssh连接,并向某个端点发出get请求以发送隧道端口号和设备mac。
我使用以下命令建立ssh连接
ssh -R "*:0:localhost:22" -N -T mypi@myserver
此命令连接myserver
的端口22
(ssh-server将侦听)并打开到随机端口的隧道。打印到stdout
Allocated port 33238 for remote forward to localhost:22
我想要的只是向服务器发出GET请求,并将此port
号码与设备macId
一起发送。当有多个设备时,如果不知道哪个设备通过隧道连接到服务器上的哪个端口,很难找到,我想解决这个问题。我无法使端口静态,因为有很多设备可能想要同时连接。
但是,我用于ssh隧道的命令阻塞了输出,因此当我尝试使用以下代码读取stdout
时,它不会像预期的那样中断while循环。
myssh-command |
while IFS= read -r line
do
echo "$line"
done
如果我使用ssh的-f
标志将命令放在后台,我无法阅读stdout
。
总结一下,我卡住了,我是bash
脚本中的新手。有没有办法在后台执行反向ssh隧道并同时从stdout获取端口号?
答案 0 :(得分:0)
一种方法是使用
将ssh进程放在后台ssh ..... > fileWithPortNumber &
然后读取文件以找出端口号。 这有点像你在寻找什么?如果是这样,请在互联网上搜索 bash job control 以获取更多信息。