Я не могу включить свое имя пользователя и пароль непосредственно в командную строку, поскольку они могут меняться со временем, и для из соображений безопасности иногда запрашивают второй пароль.
Любая помощь приветствуется
Минималистский образец:
Код: Выделить всё
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class VPNConnectionHandler {
public static void main(String[] args) {
String[] command = {"sudo", "openconnect", "--background", "--protocol=nc", "--user=user", "serveradress"};
try {
ProcessBuilder processBuilder = new ProcessBuilder(command);
Process process = processBuilder.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
OutputStreamWriter stdOutput = new OutputStreamWriter(process.getOutputStream());
String line;
boolean passwordPrompted = false;
while ((line = stdInput.readLine()) != null || (line = stdError.readLine()) != null) {
if (line != null) {
System.out.println(line);
if (line.toLowerCase().contains("password:")) {
System.out.println("password asked");
if (!passwordPrompted) {
System.out.print("password ");
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
String password = consoleReader.readLine();
stdOutput.write(password + "\n");
stdOutput.flush();
passwordPrompted = true;
}
}
}
if (line == null) {
break;
}
}
int exitCode = process.waitFor();
System.out.println("Process exited with code " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
Код: Выделить всё
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class VPNConnectionManager {
public static void main(String[] args) {
String[] command = {"sudo", "openconnect", "--background", "--protocol=nc", "--user=user", "server"};
try {
ProcessBuilder processBuilder = new ProcessBuilder(command).inheritIO();
Process process = processBuilder.start();
//password request
//scanner or what ever to I can fill in the password
int exitCode = process.waitFor();
System.out.println("Process exited with code " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
https://github.com/agavrilov76/ExpectIt< /п>
Подробнее здесь: https://stackoverflow.com/questions/786 ... essbuilder