문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
java:ssh [2015/08/18 15:33] kwon37xi |
java:ssh [2015/08/20 15:04] (현재) kwon37xi |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| ====== Java SSH ====== | ====== Java SSH ====== | ||
| + | Java와 SSH | ||
| ====== JSch ====== | ====== JSch ====== | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| + | |||
| + | ===== 기본 Exec 예제, 일반/ | ||
| + | <code java> | ||
| + | JSch jsch = new JSch(); | ||
| + | |||
| + | String host = " | ||
| + | String username = " | ||
| + | jsch.addIdentity(" | ||
| + | |||
| + | Session session = jsch.getSession(username, | ||
| + | |||
| + | Properties sessionConfig = new Properties(); | ||
| + | sessionConfig.put(" | ||
| + | session.setConfig(sessionConfig); | ||
| + | session.connect(); | ||
| + | |||
| + | ChannelExec channel = (ChannelExec) session.openChannel(" | ||
| + | channel.setCommand("/ | ||
| + | |||
| + | // null이면 입력이 없다는 뜻. System.in 을 지정할 경우 스트림이 안 닫히기 때문에 종료가 안되는 듯. | ||
| + | channel.setInputStream(null); | ||
| + | |||
| + | // 출력 스트림을 명시적으로 받아서 처리할 것이므로 설정하지 않는다. | ||
| + | // channel.setOutputStream(System.out); | ||
| + | // channel.setErrStream(System.err); | ||
| + | |||
| + | // 출력 스트림을 호출하면 출력 스트림을 끝까지 읽고 처리해줘야 함. | ||
| + | InputStream inputStream = channel.getInputStream(); | ||
| + | final InputStream errStream = channel.getErrStream();// | ||
| + | byte[] buffer = new byte[BUFFER_SIZE]; | ||
| + | |||
| + | channel.connect(); | ||
| + | |||
| + | while(true) { | ||
| + | while (inputStream.available() > 0) { | ||
| + | int i = inputStream.read(buffer, | ||
| + | if (i < 0) { | ||
| + | break; | ||
| + | } | ||
| + | |||
| + | System.out.println(new String(buffer, | ||
| + | } | ||
| + | |||
| + | while (errStream.available() > 0) { | ||
| + | int i = errStream.read(buffer, | ||
| + | if (i > 0) { | ||
| + | System.err.println(new String(buffer, | ||
| + | } | ||
| + | } | ||
| + | |||
| + | if (channel.isClosed()) { | ||
| + | if (inputStream.available() > 0 || errStream.available() > 0) { | ||
| + | continue; | ||
| + | } | ||
| + | break; | ||
| + | } | ||
| + | |||
| + | TimeUnit.MILLISECONDS.sleep(100); | ||
| + | } | ||
| + | |||
| + | final int exitStatus = channel.getExitStatus(); | ||
| + | System.out.println(" | ||
| + | |||
| + | channel.disconnect(); | ||
| + | session.disconnect(); | ||
| + | </ | ||
| + | |||
| + | ==== 입력 스트림을 주고 싶을 때 간단한 예 ==== | ||
| + | <code java> | ||
| + | // channel 객체 생성 후 | ||
| + | InputStream userInput = new ByteArrayInputStream(" | ||
| + | channel.setInputStream(userInput); | ||
| + | // 그외 작업 실행.. | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Channels ===== | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||