发布于 2023-01-05 17:18:43
使用-f标志进行尝试确实会阻止以其他方式给出的报告。看一下文档(man ssh,搜索-f),我们可以看到
-f请求ssh在执行命令之前转到后台。
但在下一段我们可以读到,
如果将
ExitOnForwardFailure配置选项设置为yes,则使用-f启动的客户端将等待所有远程端口转发成功建立,然后将自身置于后台。
这意味着如果没有这个设置,命令就会立即进入后台,这就是为什么它不能向您报告所分配的端口。
这将导致修改命令,该命令实际上报告了诸如Allocated port 1234 for remote forward to 192.168.0.16:80这样的消息:
ssh -o ExitOnForwardFailure=yes -fN -R 0:192.168.0.16:80 root@164.92.194.26但是,试图在变量中快速捕获它,可以确定它是被写入stderr而不是stdout的。因此,最后的解决办法是:
port=$(
ssh -o ExitOnForwardFailure=yes -fN -R 0:192.168.0.16:80 root@164.92.194.26 2>&1 |
awk '/Allocated/{print $3+0}'
)
[ -n "$port" ] && echo "Port $port was allocated"结果产生这样的输出:
Port 42655 was allocatedhttps://unix.stackexchange.com/questions/730658
复制相似问题