HOWTO · Java

Java에서 SSH 연결 생성

이 자습서에서는 JSch 및 Apache Mina SSHD 라이브러리를 사용하여 Java에서 SSH 연결을 만드는 방법에 대해 설명합니다.

이 페이지의 내용

Secure Shell 또는 Secure Socket Shell이라고도 하는 SSH는 보안 연결을 통해 다른 컴퓨터에 연결할 수 있는 네트워크 프로토콜입니다.

오늘의 튜토리얼에서는 SSH 연결을 여는 방법에 대해 설명하고 JSch 및 Apache Mina SSHD를 사용하여 SSH 연결을 생성하는 방법을 보여줍니다.

Java에서 SSH 연결 생성

다양한 방법이 있지만 JSch와 Apache Mina SSHD를 사용하는 것이 가장 일반적이므로 하나씩 배워보도록 하겠습니다.

방법 1: JSch를 사용하여 Java에서 SSH 연결 생성

‘JSch’는 순수한 Java로 작성된 ‘SSH2’의 구현입니다. 이 라이브러리를 사용하면 SSHD 서버에 연결할 수 있습니다. 또한 X11 포워딩, ‘포트’ 포워딩, 파일 전송 등을 사용할 수 있습니다.

아래 예제는 JSch를 사용하여 간단한 SSH 연결을 생성합니다.

예제 코드:

// Importing necessary packages
import com.jcraft.jsch.*;
import java.io.InputStream;

public class JavaJSCH {
  public static void main(String[] args) {
    // Organizing all necessary elements for authenticating
    String MyHost = "test.rebex.net";
    String User = "demo";
    String Password = "password";

    try {
      // Configuring
      java.util.Properties Config = new java.util.Properties();

      // Disable the 'StrictHostKeyChecking'
      Config.put("StrictHostKeyChecking", "no");

      // Declaring a JSch object
      JSch Jsch = new JSch();

      // Creating a session
      Session MySession = Jsch.getSession(User, MyHost, 22);

      // Setting the session password
      MySession.setPassword(Password);

      // Configuring the session
      MySession.setConfig(Config);

      // Connecting the session
      MySession.connect();
      System.out.println("Successfully Connected !!!");

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

출력:

Successfully Connected !!!

방법 2: Apache Mina SSHD를 사용하여 Java에서 SSH 연결 생성

Apache Mina SSHD는 SSH 프로토콜을 사용하여 서버와의 연결을 생성하는 또 다른 라이브러리입니다. 이 라이브러리도 순수 Java로 작성되었으며 주로 Apache MINA를 기반으로 합니다.

아래 예제는 Apache Mina SSHD를 사용하여 간단한 SSH 연결을 생성합니다.

예제 코드:

// Importing necessary packages
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.example.reverser.ReverseProtocolHandler;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class JavaSSHD {
  // Specifying the PORT
  private static final int PORT = 8080;

  public static void main(String[] args) throws Exception {
    // Creating an acceptor object
    NioSocketAcceptor TheAcceptor = new NioSocketAcceptor();
    // Preparing the configuration
    TheAcceptor.getFilterChain().addLast("logger", new LoggingFilter());
    TheAcceptor.getFilterChain().addLast(
        "codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));

    // Binding all necessary things
    TheAcceptor.setHandler(new ReverseProtocolHandler());
    TheAcceptor.bind(new InetSocketAddress(PORT));
    System.out.println("Listening on port " + PORT);
  }
}

위에서 공유한 예는 포트 목록을 제공하는 서버 프로그램의 기본 수준을 보여줍니다. 위에서 공유한 예제 코드를 실행하면 콘솔에 아래와 같은 출력이 표시됩니다.

출력:

Listening on port 8080