Java Jsch,在JumpHosts上执行命令
帮助Jsch,在JumpHosts上执行命令:我需要在一个无法直接访问的服务器上获得SSH访问权限,因为中间有一个SSH jump服务器。我使用JSCH库,但文档(JumpHosts.java示例)是关于如何获取服务器文件目录的。有什么建议吗Java Jsch,在JumpHosts上执行命令,java,ssh,jsch,Java,Ssh,Jsch,帮助Jsch,在JumpHosts上执行命令:我需要在一个无法直接访问的服务器上获得SSH访问权限,因为中间有一个SSH jump服务器。我使用JSCH库,但文档(JumpHosts.java示例)是关于如何获取服务器文件目录的。有什么建议吗 public static void main(String[] arg){ try{ JSch jsch=new JSch(); String host="host ip"; if(arg.length>0){ hos
public static void main(String[] arg){
try{
JSch jsch=new JSch();
String host="host ip";
if(arg.length>0){
host=arg[0];
}
String user = "username";
session=jsch.getSession(user, host, 22);
String passwd = "password";
session.setPassword(passwd);
UserInfo ui = new MyUserInfo(){
public void showMessage(String message){
JOptionPane.showMessageDialog(null, message);
}
};
session.setUserInfo(ui);
session.connect(30000); // making a connection with timeout.
channel=session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect(3*1000);
}
catch(Exception e){
System.out.println(e);
}
我只是照我说的做了。我为任何需要它的人分享:在此之后,您必须创建频道(“Shell/Exec”)并管理流输入/输出(我的英语很抱歉)
您能够使用普通的ssh客户端(如putty或openssh)连接到服务器吗?可以试试吗?是的,我可以使用典型的ssh客户端跳转到第二台主机。问题来自Java应用程序:我可以从应用程序连接并从服务器1(跳转服务器)获取promp,但我不知道如何在第二台服务器上连接或执行命令马特·克拉克:谢谢,我要试试看,在使用SSH客户端时,您是如何做到的?是什么阻止你使用JSCH做完全相同的事情?
public static void sesionA(){
try {
Session sessionA = jSch.getSession(username, hostA);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
sessionA.setConfig(config);
sessionA.setPassword(passwordA);
sessionA.connect();
if(sessionA.isConnected()) {
System.out.println("Connected host A!");
forwardedPort = 2222;
sessionA.setPortForwardingL(forwardedPort, hostB, 22);
}
} catch (JSchException e) {
e.printStackTrace();
}
}
public static void sesionB(){
try {
Session sessionB = jSch.getSession(username, "localhost", forwardedPort);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
sessionB.setConfig(config);
sessionB.setPassword(passwordB);
sessionB.connect();
if(sessionB.isConnected()) {
System.out.println("Connected host B!");
}
}
}