通过jsch将ssh连接到Java中的Unix服务器
对于我从一台Unix服务器到另一台Unix服务器的ssh连接,我真的感到很震惊,也没有什么想法了。这是我在Unix服务器之间建立ssh连接的java代码:通过jsch将ssh连接到Java中的Unix服务器,java,unix,jsch,Java,Unix,Jsch,对于我从一台Unix服务器到另一台Unix服务器的ssh连接,我真的感到很震惊,也没有什么想法了。这是我在Unix服务器之间建立ssh连接的java代码: import com.jcraft.jsch.*; import java.util.Properties; public class ScpFiles { public static void main(String[] arg){ // TODO code application logic here JSc
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服务器
有几天我在谷歌上搜索了这个错误,但听起来上面的答案并不能解决我的问题,这里的人能告诉我哪里出了问题吗
感谢堆。正如我从您的代码中看到的,您在使用通道时仍然为空:
channel.connect();
和后面的第2行:
channel = session.openChannel("exec");
我认为您需要删除通道。connect();行,您的程序应该可以运行。scp将是代码成功通过ssh连接到远程unix服务器后的下一个短语。NullPointerException是由channel.disconnect()引起的;由于ssh连接根本没有建立,因此它会抛出该错误,但这不是这里的重点,重点是它无法建立ssh连接。感谢Martin,我将首选身份验证设置为密码,但我收到一个新错误:
com.jcraft.jsch.JSchException:Auth fail at com.jcraft.jsch.Session.connect(Session.java:464)在com.jcraft.jsch.Session.connect(Session.java:158)在ScpFiles.main(ScpFiles.java:44)上我非常确定用户名和密码是正确的,因为ssh命令工作得很好。我将尝试获取日志文件,看看到底出了什么问题。虽然这确实是真的,但异常是由se引发的session.connect()
,因此执行永远不会到达通道。connect()
。我测试了该类,使用该行我得到了与OP相同的异常。删除它后,该类工作正常。什么“相同的异常”?OP发布了三个不同的异常。JSchException
:Auth cancel、NullPointerException
和JSchException
:Auth fail。NullPointerException.@MartinPrikryl我不知道OP中的案例是否存在其他配置问题,但这些问题将无法调查,因为它们与详细信息相关OP writer不想公开共享的内容。无论如何,修复此部分可能有助于解决这些问题(如果有)。