문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
java:ssh [2015/08/18 16:27] kwon37xi |
java:ssh [2015/08/20 15:04] (현재) kwon37xi |
||
---|---|---|---|
줄 6: | 줄 6: | ||
* [[http:// | * [[http:// | ||
- | ===== 가장 | + | ===== 기본 |
- | Private Key를 통해 접속하여 명령을 실행하고 그 결과를 현재 출력/에러 스트림으로 보내는 가장 간단한 예제. | + | |
<code java> | <code java> | ||
JSch jsch = new JSch(); | JSch jsch = new JSch(); | ||
String host = " | String host = " | ||
- | String username = "[username]"; | + | String username = "[usrname]"; |
- | jsch.addIdentity(" | + | jsch.addIdentity(" |
Session session = jsch.getSession(username, | Session session = jsch.getSession(username, | ||
줄 24: | 줄 22: | ||
ChannelExec channel = (ChannelExec) session.openChannel(" | ChannelExec channel = (ChannelExec) session.openChannel(" | ||
- | channel.setCommand("/ | + | channel.setCommand(" |
- | // setInputStream을 호출하면 InputStream을 닫아주는 작업도 올바로 해야함. | + | // null이면 입력이 없다는 뜻. System.in |
channel.setInputStream(null); | channel.setInputStream(null); | ||
- | // 출력 | + | // 출력 스트림을 명시적으로 |
- | channel.setOutputStream(System.out); | + | // channel.setOutputStream(System.out); |
- | channel.setErrStream(System.err); | + | // channel.setErrStream(System.err); |
- | // 출력 스트림을 호출하면 출력 스트림을 읽고 | + | // 출력 스트림을 호출하면 출력 스트림을 |
- | // 여기서는 System.out과 System.err이 처리하게 둠. | + | InputStream inputStream = channel.getInputStream(); |
- | // channel.getInputStream(); | + | final InputStream errStream = channel.getErrStream();// |
- | // channel.getErrStream(); | + | byte[] buffer = new byte[BUFFER_SIZE]; |
channel.connect(); | channel.connect(); | ||
while(true) { | 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 (channel.isClosed()) { | ||
+ | if (inputStream.available() > 0 || errStream.available() > 0) { | ||
+ | continue; | ||
+ | } | ||
break; | break; | ||
} | } | ||
줄 47: | 줄 64: | ||
TimeUnit.MILLISECONDS.sleep(100); | TimeUnit.MILLISECONDS.sleep(100); | ||
} | } | ||
+ | |||
+ | final int exitStatus = channel.getExitStatus(); | ||
+ | System.out.println(" | ||
channel.disconnect(); | channel.disconnect(); | ||
session.disconnect(); | session.disconnect(); | ||
</ | </ | ||
+ | |||
+ | ==== 입력 스트림을 주고 싶을 때 간단한 예 ==== | ||
+ | <code java> | ||
+ | // channel 객체 생성 후 | ||
+ | InputStream userInput = new ByteArrayInputStream(" | ||
+ | channel.setInputStream(userInput); | ||
+ | // 그외 작업 실행.. | ||
+ | </ | ||
+ | |||
+ | |||
===== Channels ===== | ===== Channels ===== |