等到SSH成功​​创建端口转发

nob*_*nob 8 ssh unix shell c

我通过 fork/exec 从 OSX/Linux-C++-Application 调用 ssh (OpenSSH) 来创建动态端口转发。这是使用批处理模式(-o BatchMode=yes)和提供给 ssh 的私钥(-i 选项)完成的。SSH 调用本身不会打开外壳(-N 选项)。

这是我完整的 SSH 调用:

ssh -N -D 9000 -o BatchMode=yes -i /path/to/private-key user@host
Run Code Online (Sandbox Code Playgroud)

我想尽快继续我的申请,所以我必须找出 ssh 是否成功创建了频道。SSH 本身只有在出现问题时才会返回。

有没有可能如何检测成功的端口转发?

当然,我可以等到端口被 SSH 打开,但我正在寻找更优雅的解决方案。另一种解决方案是检查 SSH 的日志 (-v) 等待“进入交互式会话”,但这对我来说听起来不太便携。

R..*_*ICE 5

使用该-f选项并将ssh进入后台(即fork并在父进程中退出),因此您可以只完成waitpid原始进程,ssh然后您知道(基于退出状态)连接失败或端口转发已经设置。