我真的没有注意到我的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服务器。
我几天都在谷歌搜索这个错误,但听起来就像那里发布的答案没有解决我的问题,有人在这里请让我了解出了什么问题。
谢谢你。
答案 0 :(得分:0)
正如我从您的代码中看到的那样,当您仍为空时,您正在使用频道:
channel.connect();
之后的2行:
channel = session.openChannel("exec");
我认为你需要删除 channel.connect(); 行,你的程序才能运行。