c++ - 如何检测 ssh 连接(通过 QProcess)何时完成?

标签 c++ qt ssh qprocess qtcore

我正在使用 QProcess 从应用程序运行 ssh 隧道:

QProcess* process = new QProcess();
process->start("ssh", QStringList()<<"-L"<<"27017:localhost:27017"<<"example.com");

到目前为止它运行良好,唯一的问题是我无法看到端口何时实际创建。

当我在 shell 上运行命令时,连接到远程主机大约需要 10 秒,之后转发的端口就可以使用了。我如何从我的应用程序中检测到它?

编辑:

正如 vahancho 所建议的,我使用了这样一个事实,即连接后终端上有一些输出可用于检测连接是否成功。但是,有一行在启动后立即运行 Pseudo-terminal will not be allocated because stdin is not a terminal,这可能会发出误报。稍后发出的第二个信号提供了正确的输出(这是端口已打开的真实指示)。为了摆脱第一条消息,我现在使用 ssh -t -t 运行 ssh 以强制分配标准输入。

因此,剩下的唯一问题是,任何人都可以在这种方法中毫无顾虑地帮助我吗?

最佳答案

So, the only question left is, can anyone help me without any concerns in this approach?

不幸的是,这不是一个稳定可靠的解决方案。它与处理 git 输出而不是使用实际库类似是一个 splinter 的概念。主要问题是这些软件不能保证输出兼容性,这是理所当然的。

试想一下,如果他们的文本不清晰、打字错误等都没有引起注意,会发生什么情况。它们本质上需要分别修复输出,所有依赖输出的应用程序都会突然中断。

这也是为什么要开发专门的库来访问可重用的功能,而不是直接与面向用户的输出打交道。例如,对于 git,这意味着 libgit2 库。

Qt 默认没有 ssh 机制,就像你可以在 python 中拥有这样的库,例如 Paramiko 。

我建议使用 libsshlibssh2 在您的代码中建立一种方法,正如您在评论中指出的那样。我能理解现在不是真正的 Qt'ish 方式带来的不便,但在这一点上,如果没有第三方,Qt 无法提供更强大的功能。

也就是说,很高兴在未来的 Qt 项目中看到类似的附加库,但这可能不会很快发生。如果您在编写软件时考虑到适当的设计,那么一旦有人站起来为 Qt 或其他地方维护这样一个额外的库,您将能够切换到这样一个库而不会出现我们的主要问题。

关于c++ - 如何检测 ssh 连接(通过 QProcess)何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20743793/

相关文章:

qt - 如何防止同一区域中的两个 qdockwidgets 之间重叠?

git - Mac OS,使用 Git : “no such file” 生成 SSH key 时出错

c++ - C++ 中的 sqldriverconnect 无法连接到本地数据库 sql 2008

c++ - 允许同时快速搜索和订购的容器

c++ - 使用 MPL 列表扩展 boost 变体

c++ - 如何将 qspaceritem 添加到 qgridlayout

c++ - QNetworkAccessManager 连接到 2 个回复槽,我怎么知道哪个回复属于哪个请求

c++ - WM_HOTKEY 没有捕捉到

git - 无法创建目录 '/c/\303\234/.ssh'

linux - SSH 使用公钥(不是私钥)进行身份验证