我使用Ganymede ssh2從我的Java應用程序連接到服務器,並在那裏做一些工作。
它可以很好地工作,但問題是請求批准的ssh命令,例如。 命令Ganymed ssh2:如何解決命令行中的(y/n)提示
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);
}
}
調用這個類的util與上述命令( '停止someService')後,在
被stuckedString line = br.readLine();
並且服務器超時後,所有內容都會中斷。
任何關於如何解決這個問題的想法都是值得歡迎的。
非常感謝, 米洛斯。
遺憾的是,此命令不會提示任何模式。但是,'Session'對象中有'getStdin()'。我試圖使用它,但無法弄清楚如何使用它。這是我添加的代碼:'\t \t \t Session sess = conn.openSession(); \t \t \t sess.execCommand(command); \t \t \t \t \t \t sess.getStdin()寫( 「PWD」 .getBytes())。 \t \t \t \t \t \t InputStream的標準輸出=新StreamGobbler(sess.getStdout()); \t \t \t \t \t \t的BufferedReader BR =新的BufferedReader(新的InputStreamReader(標準輸出));」有什麼不對,但不知道是什麼?! – trivunm 2012-03-16 23:30:42
對不起,我添加的代碼是:'Session sess = conn.openSession(); \t \t \t sess.execCommand(command); \t \t \t \t \t \t sess.getStdin()。寫( 「Y」。的getBytes()); \t \t \t \t \t \t InputStream的標準輸出=新StreamGobbler(sess.getStdout()); \t \t \t \t \t \t的BufferedReader BR =新的BufferedReader(新的InputStreamReader(標準輸出));' – trivunm 2012-03-16 23:43:36
一個作家包住標準輸入流,然後寫上 「Y \ N」,所以它發送回車 – artbristol 2012-03-17 08:53:12