使用 QNetworkAccessManager 通过 SSH2 协议上传文件

Upload file via SSH2 protocol using QNetworkAccessManager

我需要在端口 22 上使用 ssh2 协议在服务器上上传图像文件。使用 QNetworkAccessManger 的 SSH2 协议在 Google 上也不流行。这是我的代码。

QUrl uploadUrl("ssh2://192.168.10.227/var/www/html/img/"+mImgFile);

    uploadUrl.setUserName("xxxxxx");
    uploadUrl.setPassword("xxxxxx");
    uploadUrl.setPort(22);

    qDebug() << uploadUrl.toString();

    QNetworkRequest uploadReq(uploadUrl);

    mReply = mNetworkManager->put(uploadReq, &file);

    connect(mReply, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(uploadProgress(qint64, qint64)));

以URL-方案为"ssh2"或"sftp"或"ssh2.sftp";它输出 协议未知 。我使用看起来很奇怪的 "ssh2.sftp" 的原因是 here(just a little php code to view).

我想知道 ssh2 是否可以与 qnetworkaccessmanager 一起使用?如果是,上传图像文件的正确 URL 格式是什么?

Qt 中不支持 SSH,例如参见 Howto implement SFTP with Qt/QNetworkAccessManager (C++) and How to easily establish an SSH connection in Qt?

QNetworkAccessManager中支持的URL方案列表可以通过QNetworkAccessManager::supportedSchemes()获取,即默认Qt版本中的("ftp", "file", "qrc", "http", "https", "data")(仅支持https如果找到外部 OpenSSL 库,因为 Qt 也没有提供它)。

因此,仍然需要使用外部 C 库 libssh2 才能使用本机套接字使用 SSH2 协议。

我找到了 here that there was some old Qt extension LibQxt with Qt SSH 支持。不过已经不再维护了。