Java で SSH 接続を作成する

MD Aminul Islam 2023年10月12日
Java で SSH 接続を作成する

Secure Shell または Secure Socket Shell とも呼ばれる SSH は、セキュリティで保護された接続を介して別のコンピューターに接続できるようにするネットワーク プロトコルです。

今日のチュートリアルでは、SSH 接続を開く方法について説明し、JSchApache Mina SSHD を使用して SSH 接続を作成する方法を示します。

Java で SSH 接続を作成する

いろいろな方法がありますが、≪JSch≫と≪Apache Mina SSHD≫を使うのが一般的ですので、一つ一つ学んでいきましょう。

方法 1: JSch を使用して Java で SSH 接続を作成する

JSch は Pure 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
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