[백업][가리사니] 자바 리눅스 ssh 사용하기
certificate, java, linux

이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.

서론

Jsch 를 이용하여 만든 쉘스크립트 접속 객체입니다.

오픈소스

준비

maven

<dependency>
  <groupId>me.saro</groupId>
  <artifactId>commons</artifactId>
  <version>3.0.2</version>
</dependency>

gradle

compile 'me.saro:commons:3.0.2'

단순 실행

  • SSHExecutor 는 같은 서비스내 터미널 결과만 받을 수 있음으로 SSHShell 사용 권장
String host = "localhost";
int port = 22;
String user = "user";
String pass = "pass";
String charset = "utf-8";

public void executor1() throws IOException {
    try (SSHExecutor ssh = SSHExecutor.open(host, port, user, pass, charset) ; Scanner sc = new Scanner(System.in)) {

        System.out.println("connected :");

        input : while ( true ) {
            // 스케너를 이용하여 터미널처럼 사용
            String line = sc.nextLine();

            if (line.equals("exit")) {
                break input;
            }

            System.out.println(ssh.cmd(line));
        }

    }
}

단순 실행 결과 가져오기

  • SSHExecutor 는 같은 서비스내 터미널 결과만 받을 수 있음으로 SSHShell 사용 권장
String host = "localhost";
int port = 22;
String user = "user";
String pass = "pass";
String charset = "utf-8";

public void executor2() throws IOException {
    // 단순 실행 후 결과를 받아온다.
    // 같은 session thread 내에 결과만 가능.
    String result = SSHExecutor.just(host, port, user, pass, charset, "ls -al");
    System.out.println(result);
}

쉘처럼 사용하기

String host = "localhost";
int port = 22;
String user = "user";
String pass = "pass";
String charset = "utf-8";

// 아웃풋은 System.out.println 로 받음
try (SSHShell ssh = SSHShell.open(host, port, user, pass, charset, System.out::println) ; Scanner sc = new Scanner(System.in)) {

    input : while ( true ) {
        // 스케너를 이용하여 터미널처럼 사용
        String line = sc.nextLine();

        ssh.cmd(line);

        if ("exit".equals(line.trim())) {

            break input;
        }
    }

}

특정 명령어 실행 후 종료

String host = "localhost";
int port = 22;
String user = "user";
String pass = "pass";
String charset = "utf-8";

public void shell2() throws IOException {
    // 아웃풋은 System.out.println 로 받음
    try (SSHShell ssh = SSHShell.open(host, port, user, pass, charset, System.out::println)) {
        // ls
        // ls -al
        // ps -ef
        // ll
        ssh.cmd("ls", "ls -al", "ps -ef", "ll");
    }
}