我試圖實現一個模擬用戶在Java中的ssh控制檯上寫/讀的用戶。 我正在使用JSCH庫來管理ssh連接。 這是從我開始的代碼:如何創建一個模擬SSH shell用戶交互的bot?
JSch jsch = new JSch();
Session session = jsch.getSession(username, ipAddress, port);
session.setPassword(password);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect(connectionTimeoutInMillis);
Channel channel = session.openChannel("shell");
InputStream is = new InputStream();
OutputStream out= new OutputStream();
channel.setInputStream(is);
channel.setOutputStream(out);
channel.connect();
channel.disconnect();
is.close();
out.close();
session.disconnect();
顯然在代碼中InputStream
和OutputStream
錯了,我需要用的東西,機器人可以用它來發送一個字符串(命令行)和接收一個String(命令執行的結果),我應該使用什麼類型的流來獲取?
此外我注意到,如果我發送一個命令並在很多情況下使用System.out
作爲輸出流,則輸出爲空,因爲(我對此幾乎肯定),Java應用程序在命令執行產生結果之前終止。對於JSCH通道監聽器「等到命令執行完成後」告訴什麼是最佳做法,然後繼續?我可以在命令執行後使用Thread.sleep(someTime)
,但由於顯而易見的原因,我不太喜歡它。