今日はもう眠いので、単純に1つのコマンド実行まで。
import java.io.*; import ch.ethz.ssh2.*; public class SshTest { private static final String hostname = "ホスト名"; private static final String userid = "ユーザ名"; private static final String password = "パスワード"; private static final int BUFFER_SIZE = 4096; public static void main(String[] arg) { try { SshTest test = new SshTest(); test.doProc(); } catch (IOException ex) {ex.printStackTrace();} } public void doProc() throws IOException { // connect & login Connection conn = new Connection(hostname); ConnectionInfo info = conn.connect(); boolean result = conn.authenticateWithPassword(userid, password); if (result) { // exec "ls -l" Session session = conn.openSession(); session.execCommand("ls -l"); System.out.println(streamToString(session.getStdout())); session.close(); } conn.close(); } // read InputStream and return output as String private String streamToString(InputStream in) throws IOException { byte[] buf = new byte[BUFFER_SIZE]; ByteArrayOutputStream out = new ByteArrayOutputStream(); int len; while ((len = in.read(buf, 0, BUFFER_SIZE))>0) out.write(buf, 0, len); return out.toString(); } }
認証して Connect を取得するところまでは scp と一緒。
その後、 openSession() でセッションインスタンスを取得して、execCommand() で実行したいコマンド文字列を渡せばいい。
実行結果は session.getStdout() で得られる InputStream を読み出す。
ということで、一見、1コマンドの実行もとても簡単に記述できる。
でも、接続先でのエラーの処理や、複数コマンドの実行を「賢く」やりたいなあ、と思ったらさすがにいろいろ面倒が起きてくるのだが、それはまた今度。