HOWTO · Java

Java で SSH 接続を作成する

このチュートリアルでは、JSch と Apache Mina SSHD ライブラリを使用して 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