Я использую Ganymede ssh2 для подключения к серверу из моего приложения Java и выполняю там некоторую работу.
Это работает отлично, но проблемы с командами ssh, которые запрашивают утверждение, например.
команда
stop someService
возвращает
Are you sure (y/n)?
и после соответствующего нажатия клавиши (y / n) он продолжает движение.
В настоящее время я использую реализацию, представленную ssh2 ganymed example, что-то вроде этого:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class ConnectUtil(String hostname, String username, String password, String command)
{
try
{
Connection conn = new Connection(hostname);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
Session sess = conn.openSession();
sess.execCommand(command);
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while (true)
{
String line = br.readLine();
if (line == null)
break;
System.out.println(line);
}
sess.close();
conn.close();
}
catch (IOException e)
{
e.printStackTrace(System.err);
}
}
После вызова этого класса утилит с помощью вышеупомянутой команды ('stop someService') он застревает на
String line = br.readLine();
и все перестает работать после истечения времени ожидания сервера.
Любые идеи о том, как решить эту проблему, приветствуются.
Большое спасибо,
Милош.