jsch

时间:2016-10-06 06:02:34

标签: java unix jsch

我真的没有注意到我的ssh从一个Unix服务器连接到另一个Unix服务器的想法,这是我在java服务器之间建立ssh连接的java代码:

import com.jcraft.jsch.*;
import java.util.Properties;

public class ScpFiles {    
  public static void main(String[] arg){
    // TODO code application logic here
    JSch jsch = null;
    Session session = null;
    Channel channel = null;

    String userName = "a_user";
    String host = "unixserver1";
    String pass = "";
    String phrase = "";
    String knownHostFile = "/home/a_user/.ssh/known_hosts";
    String rsa = "/home/a_user/.ssh/id_rsa";

    try{
        jsch = new JSch();
        session = jsch.getSession(userName, host, 22);
        session.setPassword(pass);
        jsch.addIdentity(rsa, phrase.getBytes());
        jsch.setKnownHosts(knownHostFile);
        //Properties prop = new Properties();
        //prop.put("StrictHostKeyChecking", "no");
        //session.setConfig(prop);
        session.connect();
        channel.connect();
        String command = "an unix command";
        channel = session.openChannel("exec");
        ((ChannelExec)channel).setCommand(command);
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        channel.disconnect();
        session.disconnect();
    }
  }
}

正如您所看到的,它非常简单,但不知怎的,它始终以此错误结束:

com.jcraft.jsch.JSchException: Auth cancel
    at com.jcraft.jsch.Session.connect(Session.java:463)
    at com.jcraft.jsch.Session.connect(Session.java:158)
    at ScpFiles.main(ScpFiles.java:43)

线程“main”java.lang.NullPointerException中的异常         在ScpFiles.main(ScpFiles.java:53)

我甚至试图通过将StrictHostKeyChecking设置为no来破坏用于测试目的的安全性,但我仍然无法ssh到远程unix服务器。

我几天都在谷歌搜索这个错误,但听起来就像那里发布的答案没有解决我的问题,有人在这里请让我了解出了什么问题。

谢谢你。

1 个答案:

答案 0 :(得分:0)

正如我从您的代码中看到的那样,当您仍为空时,您正在使用频道

channel.connect();

之后的2行:

channel = session.openChannel("exec");

我认为你需要删除 channel.connect(); 行,你的程序才能运行。