我正在使用Ganymede ssh2从我的Java应用程序连接到服务器并在那里做一些工作 它完美地工作但问题是请求批准的ssh命令,例如。 命令
stop someService
返回
Are you sure (y/n)?
并在适当的击键(y / n)之后继续前进。
目前我正在使用ssh2 ganymed示例给出的实现,像这样:
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')调用这个util类之后,它就被卡在了
String line = br.readLine();
并且在服务器超时后一切都会中断。
关于如何解决这个问题的任何想法都非常受欢迎。
非常感谢, 米洛斯。
答案 0 :(得分:1)
假设Session
有getStdin()
方法,您应该将问题的回复写入。
或者查看要求输入的命令是否具有不会提示的“非交互式”模式。
答案 1 :(得分:0)
如果您要使用stdin而不是exec,那么首先必须执行session.startShell()。阅读常见问题解答。
答案 2 :(得分:-1)
我使用此代码......
sess.executeCommand("ena"+'\n' +"pass"+'\n' +"exit"+'\n');