Java에서 SSH 연결 생성

MD Aminul Islam 2023년10월12일
Java에서 SSH 연결 생성

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

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

Java에서 SSH 연결 생성

다양한 방법이 있지만 JSchApache 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
MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn