0

特定のコマンドを SSH 経由でリモート サーバーに送信できる小さなアプリケーションを開発しようとしています。Linux ターミナルまたは Windows コマンド プロンプトから実行すると問題なく動作しますが、Java アプリケーションから実行すると、常にステータス コード 255 が返されます。

ファイアウォールを無効にし、サーバーで SSH をリッスンしているポートを 22 に変更しましたが、別のポートを使用しているため、何も機能しません。例外などはスローされず、問題なく接続されている場合。何か案は?

私はsshjライブラリとJSchライブラリを試しましたが、どちらも同じ問題を抱えています。

ForwardAgent がオフになっている

sshj の例

private void sshj() throws Exception {
    SSHClient ssh = new SSHClient();
    ssh.addHostKeyVerifier((s, i, publicKey) -> true);
    ssh.connect("host", 22);
    Session session = null;
    try {
        ssh.authPassword("username", "password");
        session = ssh.startSession();
        Session.Command cmd = session.exec("command");
        System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
        cmd.join(5, TimeUnit.SECONDS);
        System.out.println("Exit status: " + cmd.getExitStatus());
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (session != null) {
            session.close();
        }

        ssh.disconnect();
    }
}

JSch の例

private static void jsch() throws Exception {
    JSch js = new JSch();
    Session s = js.getSession("username", "host", 22);
    s.setPassword("password");
    Properties config = new Properties();
    config.put("StrictHostKeyChecking", "no");
    s.setConfig(config);
    s.connect();

    Channel c = s.openChannel("exec");
    ChannelExec ce = (ChannelExec) c;
    ce.setCommand("command");
    ce.connect();

    BufferedReader reader = new BufferedReader(new InputStreamReader(ce.getInputStream()));
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }

    ce.disconnect();
    s.disconnect();

    System.out.println("Exit status: " + ce.getExitStatus());
}
4

1 に答える 1