Qt/C++ 在远程机器上执行命令并与其提示符交互

Qt/C++ Execute Commands on a Remote Machine & Interact with its Prompts

本文关键字:命令 执行 交互 提示符 机器 C++ 程机器 Qt      更新时间:2023-10-16

我正在使用Qt 5框架开发一个C++程序,需要执行以下操作:

  1. 使用 SSH 连接到远程服务器
  2. 执行像 mkdir ~/test 这样的命令
  3. 执行像 mysqldump -u test -p123 testdb -> testdb 这样的命令.sql

基本上,您将像使用终端一样运行标准命令。

我查看了 QProcess,但它是有限的,我对使用 echo "密码" | ssh -x 主机名 -l 用户名等感到不舒服......

是否有任何C++或Qt库可以完成我想要完成的任务?

您应该学习如何在没有任何密码的情况下配置ssh(使用公钥)(或者在启动Qt应用程序之前仅使用ssh-add添加的密码)。阅读一些好的 ssh 教程。然后使用 openssl 和/或 libssh 等...

我找到了适合我需求的解决方案。如果我真的想出一个跨平台的解决方案,我会让你们知道。以下是使其在 Linux 环境中的 QT 中工作的方法。

QStringList commands;
commands << "-hold";
commands << "-e";
commands << "ssh username@host 'cd /home/user/backups; mysqldump -u root -p mydb > mydb.sql; echo DONE!'";
QProcess *process = new QProcess(0);
process->setProcessChannelMode(QProcess::MergedChannels);
process->start("xterm", commands);
if(!process->waitForStarted()){
    qDebug() << "Could not wait to start...";
}
if(!process->waitForFinished()) {
    qDebug() << "Could not wait to finish...";
}
process->closeWriteChannel();
qDebug() << process->readAll();