如何从Qt调用SCP命令

如何从Qt调用SCP命令,qt,Qt,我想通过SCP命令将文件从本地计算机复制到远程服务器。我可以通过Cygwin复制文件。现在我想通过Qt实现这一点。如何调用“SCP”命令?如果我使用QProcess,那么我将如何了解密码提示?据我所知,无论您尝试以何种方式调用命令,您都会遇到同样的问题,即scp提示输入密码(例如,即使您尝试编写调用scp的bash脚本) 我知道可能的解决方案包括: 创建公钥/私钥并分发它们,这样就不需要提示您输入密码。关于这个主题的一篇有趣的论文是 创建一个expect脚本并用QProcess调用它 要求您的

我想通过SCP命令将文件从本地计算机复制到远程服务器。我可以通过Cygwin复制文件。现在我想通过Qt实现这一点。如何调用“SCP”命令?如果我使用QProcess,那么我将如何了解密码提示?

据我所知,无论您尝试以何种方式调用命令,您都会遇到同样的问题,即scp提示输入密码(例如,即使您尝试编写调用scp的bash脚本) 我知道可能的解决方案包括:

  • 创建公钥/私钥并分发它们,这样就不需要提示您输入密码。关于这个主题的一篇有趣的论文是
  • 创建一个
    expect
    脚本并用QProcess调用它

要求您的用户使用公钥,您的问题就解决了:


scp、ssh、sftp等故意让用户很难直接获取密码。具体来说,像
expect
这样的东西是行不通的。如果他们这样做了,他们就不安全了

如果您
write()
将密码(作为
QByteArray
)写入
QProcess
的标准输入,它不起作用吗?只需尝试使用
QProcess
调用
pg_dump
命令(PostgreSQL备份实用程序),然后将密码作为
QByteArray
写入其标准输入。要知道何时写入(),我正在监视进程的标准错误(readyReadStandardError()信号)。如果字符串
startsWith()
密码:
,则I
write()
密码。很好用,绝对不一样。尝试了
scp-v somefileme@localhost:/某处/somefile
。弹出一个对话框,提示输入密码。我认为这就是用户
robert
在其回答中所描述的。简而言之,不可能将密码写入
QProcess
的标准输入。