2012-05-11 5 views
1

Я хочу скопировать файлы с локальной машины на удаленный сервер с помощью команды SCP. Я смог скопировать файлы через Cygwin. Теперь я хочу достичь этого через Qt. Как вызвать команду «SCP»? Если я использую QProcess, то как мне узнать о приглашении пароля?Как вызвать команду SCP из Qt

+0

Не работает ли это, если вы 'write()' пароль (как 'QByteArray') для стандартного ввода' QProcess'? – dschulz

+0

Просто попробовал вызывать команду 'pg_dump' (утилиту резервного копирования PostgreSQL) с помощью' QProcess', а затем записывал пароль на свой стандартный ввод в виде 'QByteArray'. Чтобы знать, когда нужно писать(), я отслеживаю стандартную ошибку процесса (readyReadStandardError() SIGNAL). Если строка 'startsWith()' '" Password: "', то я 'write()' пароль. Он работает отлично. – dschulz

+0

сейчас попробуем с 'scp'. – dschulz

ответ

0

Как Фара, как я знаю, вы попали в такую ​​же проблему с Scp предлагающее пароля в зависимости от того, как вы пытаетесь вызвать команду (даже если вы пытаетесь писать Баш скрипт, который вызывает УПП, для экземпляр) Возможное решение Я осознаю включает в себя:

  • создать открытый/закрытый ключ и распределить их так, что вам не нужно будет предложено с паролем. Интересная статья на эту тему является here
  • создать expect сценарий и вызвать его с QProcess
0

Требовать пользователей, чтобы использовать открытые ключи и ваша проблема решена: https://hkn.eecs.berkeley.edu/~dhsu/ssh_public_key_howto.html

УПП, SSH, SFTP, и т. д. намеренно затрудняют использование пароля, кроме как непосредственно от пользователя. В частности, такие вещи, как expect, не будут работать. И если бы они это сделали, они не были бы в безопасности.

Смежные вопросы