문서의 이전 판입니다!
Java와 SSH
Private Key를 통해 접속하여 명령을 실행하고 그 결과를 현재 출력/에러 스트림으로 보내는 가장 간단한 예제.
JSch jsch = new JSch(); String host = "[hostname]"; String username = "[username]"; jsch.addIdentity("/path/to/.ssh/id_rsa"); Session session = jsch.getSession(username, host, 22); Properties sessionConfig = new Properties(); sessionConfig.put("StrictHostKeyChecking", "no"); session.setConfig(sessionConfig); session.connect(); ChannelExec channel = (ChannelExec) session.openChannel("exec"); channel.setCommand("/bin/ls /etc"); // setInputStream을 호출하면 InputStream을 닫아주는 작업도 올바로 해야함. channel.setInputStream(null); // 출력 내용을 System 스트림으로 보내게 함. channel.setOutputStream(System.out); channel.setErrStream(System.err); // 출력 스트림을 호출하면 출력 스트림을 읽고 닫아주는 작업도 해야함. // 여기서는 System.out과 System.err이 처리하게 둠. // channel.getInputStream(); // <- 일반 출력 스트림 // channel.getErrStream(); // <- 일반 에러 스트림 channel.connect(); while(true) { if (channel.isClosed()) { break; } TimeUnit.MILLISECONDS.sleep(100); } channel.disconnect(); session.disconnect();
com.jcraft.jsch.Channel
에서 채널 종류를 볼 수 있다. 주요한 것들은session
shell
exec
x11
sftp