LoginSignup
1
0

More than 3 years have passed since last update.

【未解決】Java6アプリからJSchを使用してSSH接続を実行すると例外が発生する件

Posted at

やりたいこと

Java6でコンパイルした自作アプリから別マシンにSSH接続することです。

環境

接続先

  • Ubuntu 16.04 LTS
  • OpenSSH 7.2p2

クライアント

  • Windows 8.1
  • 自作アプリ
  • JSch

問題概要

JSchのAPIを呼び出して別マシンへのSSH接続を実行すると、JSch内で例外が発生します。

問題詳細

今さらJava6?
と思われるかもしれませんが、使わなければいけない事情がありましたので。

JavaでSSH接続となると、JCraftJSchライブラリが使用されることが多いようです。
Mevanリポジトリにも登録されていますし、JCraftのサイトからもダウンロードできます。

そんなわけで、早速、使用してみました。
コードはシンプルに以下のような感じです。

MainClass.java
package sample.sshconnect;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

public class MainClass {

    private static final String USER = "user_sample";
    private static final String HOST = "111.222.333.444";
    private static final String PASSWORD = "password_sample";
    private static final int PORT = 22;

    public static void main(String[] args) {
        // サーバーへの接続と切断
        JSch jsch = new JSch();
        Session session = null;
        try {
            session = jsch.getSession(USER, HOST, PORT);
        } catch (JSchException e) {
            e.printStackTrace();
            return;
        }
        session.setConfig("StrictHostKeyChecking", "no");
        session.setPassword(PASSWORD);
        try {
            session.connect();
        } catch (JSchException e) {
            e.printStackTrace();
            return;
        }
        session.disconnect();
    }
}

pom.xmlではmaven-compiler-plugin1.6を指定します。

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SampleSshConnect</groupId>
  <artifactId>SampleSshConnect</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>com.jcraft</groupId>
      <artifactId>jsch</artifactId>
      <version>0.1.55</version>
    </dependency>
  </dependencies>
</project>

実行してみると、コンソールに以下のような情報が出力されます。

com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stream Read
    at com.jcraft.jsch.Session.connect(Session.java:565)
    at com.jcraft.jsch.Session.connect(Session.java:183)
    at sample.sshconnect.MainClass.main(MainClass.java:27)

どうやら、session.connect();の中で例外が発生しているようです。

そこで、pom.xmlを修正して、maven-compiler-pluginに指定するバージョンを1.7にしてみます。

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SampleSshConnect</groupId>
  <artifactId>SampleSshConnect</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>com.jcraft</groupId>
      <artifactId>jsch</artifactId>
      <version>0.1.55</version>
    </dependency>
  </dependencies>
</project>

実行してみると、コンソールには何も表示されません。

ということは、Java7でコンパイルすると正常にSSH接続が実行され、
Java6でコンパイルするとSSH接続時に例外が発生するということになります。

解決策

例外発生を回避する手段はまだ見つけられていません。
何とかならないものかと。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0