Подключение к сервису SFTP через процесс Java Runtime - PullRequest
3 голосов
/ 07 июня 2010

В моем проекте у меня есть файл класса Java, внутри которого у меня есть подпрограмма, которая выполняет следующий внешний файл сценария SFTP:

#!/bin/sh
echo "cd AV/OASIS" >> sftp
echo "put $1 $2" >> sftp
echo "get AV/OASIS/$2 $3$2" >> sftp
echo "bye" >> sftp
/usr/local/bin/sftp -b sftp id@domain
cat /dev/null > sftp
exit 0

Код Java, который выполняет файл сценария, выглядит следующим образом:

String script = "full path of script";
Process p = Runtime.getRuntime().exec(script + " " + param1 + " " + param2 + " " + param3);

Однако я не уверен, почему, но журнал, сгенерированный файлом класса, всегда показывает ошибку " Ошибка проверки ключа хоста. Соединение закрыто. "

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

Я бы вручную запустил команду, которую будет выполнять файл класса Java, и он также протестировал:

$ script.sh param1 param2 param3

Я попытался найти сообщение об ошибке в Интернете, и, похоже, оно как-то связано с known_hosts. Может ли это быть причиной, или я скучаю по чему-то еще?

Большое спасибо!

1 Ответ

2 голосов
/ 07 июня 2010

Причина, по которой ключ хоста не может быть проверен на одной машине, а не на другой, заключается в том, что одна машина ранее подключалась, а другая - нет. Если машина ранее не подключалась к хосту, у нее не будет ключа хоста для проверки. Ключ хоста может не пройти проверку по ряду причин - по злонамеренным причинам, например, когда кто-то участвует в атаке «человек посередине», и по не злонамеренным причинам, например, изменилось имя хоста удаленного компьютера.

Способ исправить это удалить строку из вашего файла known_hosts в ~ / .ssh

Кстати, вы знаете, что вам не нужно раскошелиться на SFTP / SCP? JSch существует и позволит вам использовать SFTP / SCP в Java. Вероятно, вам следует сделать это, потому что это будет работать на не-Unix-платформах, таких как Windows, и у вас будет немного больше контроля над такими вещами, как known_hosts. Это довольно просто в использовании.

...