Процесс Scp, вызванный из потока Daemon, завершается сбоем из-за отсутствия /dev/ttyJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Процесс Scp, вызванный из потока Daemon, завершается сбоем из-за отсутствия /dev/tty

Сообщение Anonymous »

У меня есть демон в Java, который я запускаю через jsvc. Большая часть демона работает нормально, однако у меня возникли проблемы с передачей файлов через SCP. В связи с настройкой компьютеров, на которые я буду передавать файлы, мне необходимо использовать аутентификацию с открытым ключом. Однако, похоже, для этого требуется, чтобы родительский процесс был связан с терминалом, а в противном случае это не удастся. Кажется, он никогда не доходит до стадии фактического запроса пароля, а до этого терпит неудачу.

Фрагмент кода Java, процесс создания

Код: Выделить всё

String[] command = { "scp", "-v", "-o", "PubkeyAuthentication=no",
localFile.getAbsolutePath(),
username + "@" + destinationIP + ":" + destinationPath };

ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectErrorStream(true);
Process scpProcess = builder.start();
Указание пароля

Код: Выделить всё

InputStream inStream = scpProcess.getInputStream();

InputStreamReader inReader = new InputStreamReader(inStream);
bInReader = new BufferedReader(inReader);

String recievedLine = null;
StringBuilder recievedLines = new StringBuilder();
boolean passwordFlag = false;

while ((recievedLine = bInReader.readLine()) != null) {
recievedLines.append(recievedLine + "\n");

// send password to the scp program
if (recievedLine.contains("password:")) {
OutputStream outStream = scpProcess.getOutputStream();
OutputStreamWriter outWriter = new OutputStreamWriter(
outStream);
bOutWriter = new BufferedWriter(outWriter);
bOutWriter.write(password + "\n");
bOutWriter.flush();
passwordFlag = true;
break;
}
}
Фрагмент файла журнала с подробным выводом SCP

Код: Выделить всё

debug1: read_passphrase: can't open /dev/tty: No such device or address
debug1: Authentications that can continue: publickey,password,keyboard-interactive
Permission denied, please try again.
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug1: Authentications that can continue: publickey,password,keyboard-interactive
Permission denied, please try again.
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: No more authentication methods to try.
Permission denied (publickey,password,keyboard-interactive).
Насколько я могу судить, происходит следующее: созданный процесс наследует tty от родительского процесса, который не установлен из-за того, что jsvc запускает его как демон. Однако я требую, чтобы этот процесс запускался как демон, и не могу это изменить.

Кто-нибудь знает, как я могу заставить процесс запускаться с tty, чтобы он не делал этого, сохраняя при этом возможность доступа к вводу/выводу/ потоки ошибок из родительской Java-программы? В противном случае, знает ли кто-нибудь другой способ заставить работать передачу SCP, использующий аутентификацию по паролю? Есть ли у кого-нибудь еще идеи по решению этой проблемы?

Подробнее здесь: https://stackoverflow.com/questions/292 ... ng-dev-tty
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»