【发布时间】:2013-12-23 12:39:06
【问题描述】:
我正在使用 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 来强制分配标准输入。
那么,剩下的唯一问题是,任何人都可以帮助我而不用担心这种方法吗?
【问题讨论】:
-
连接完成后ssh有输出吗?
-
其实..是的。谢谢你的想法!我现在就去试试……
-
这几乎可以工作。第一行是“不会分配伪终端,因为标准输入不是终端”。这会在启动进程后立即发生。我再次收到 readyReadStandardOuptut 信号,此时它实际上已准备好使用。但是,我不确定这是否可以保证在所有平台上一直发生。有什么建议吗?
-
我能够使用这个“ssh -t -t”来摆脱第一条消息。取自stackoverflow.com/questions/7114990/…。有什么你能想到的顾虑吗?
-
实际上,我真正考虑的是继续使用 libssh 对隧道过程进行更精细的控制,这看起来也是实现更健壮系统的方法。
标签: c++ qt ssh qprocess qtcore