Вызов SCP из ProcessBuilder - PullRequest
       30

Вызов SCP из ProcessBuilder

0 голосов
/ 21 февраля 2011

Я использую ProcessBuilder в своем приложении, мне нужно вызвать SCP (чтобы загрузить файл), но у меня есть проблема, как дать пароль.Как решить эту проблему?

String[] commands=new String[]{"bash","-c","scp example.tar.gz username@192.168.0.131 /root/new "};
ProcessBuilder pb = new ProcessBuilder(commands);
pb.redirectErrorStream(true);
Process process = pb.start();

Где добавить пароль для SCP?

Ответы [ 3 ]

1 голос
/ 21 февраля 2011

Лучший способ добиться этого - использовать пару ключей вместо аутентификации по паролю.Чтобы создать пару ключей, войдите на удаленный компьютер под именем пользователя.В приглашении введите:

ssh-keygen -t rsa

, это сгенерирует закрытый ключ ~ / .ssh / id_rsa и открытый ключ ~ / .ssh / id_rsa.pub.Скопируйте ~ / .ssh / id_rsa.pub на локальный компьютер, затем используйте следующие командные строки:

mkdir ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2
cat id_rsa.pub >> ~/.ssh/authorized_keys2

(примечание: mkdir может завершиться ошибкой, если ~ / .ssh уже существует - просто продолжайтевторая команда в этом случае.)

1 голос
/ 21 февраля 2011

Другой вариант - использовать ожидаемый скрипт.Создайте файл, содержащий следующее, и сохраните его как / some / path / scp_expect.Этот файл должен принадлежать пользователю, который будет выполнять код Java.

#!/usr/bin/expect -f

spawn scp example.tar.gz username@192.168.0.131 /root/new
expect "assword:"
send -- "password\r"
expect eof

Измените пароль соответствующим образом.Сделайте файл исполняемым:

chmod 700 /some/path/scp_expect

Теперь вместо этого вызовите ожидаемый скрипт из вашего Java-кода:

String[] commands = new String[]{"bash", "-c", "/some/path/scp_expect"};

Если он не работает, измените "assword:" на строку, которая являетсяотображается, когда вы повысили свой пароль.

Недостатком этой опции является то, что ваш пароль находится в открытом виде в сценарии, поэтому убедитесь, что вы учитываете последствия для безопасности, связанные с этим.Я бы предпочел сам использовать метод аутентификации по ключу.

1 голос
/ 21 февраля 2011

Библиотека JSch лучше подходит для этого.Взгляните на их пример для поиска файлов.

...