【发布时间】:2018-07-02 08:25:17
【问题描述】:
需要通过 jumphost SSH 到目标主机。已经尝试过JSch JumpHosts example中提到的相同方法。
Session[] sessions = new Session[2];
Session session = null;
sessions[0] = session = jsch.getSession(getUserName(), "jumphost1.com", 22);
session.setPassword(getHostPassword());
UserInfo userInfo = new UserInfo();
userInfo.setPassword(getHostPassword());
session.setUserInfo(userInfo);
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
prop.put("PreferredAuthentications", "publickey,keyboard-interactive,password");
session.setConfig(prop);
session.connect();
String host = "host1.com";
int assignedPort = session.setPortForwardingL(0, host, 22);
LOGGER.info("Jump host the {} of agent {} and port forwarding {}", i, host, assignedPort);
sessions[i] = session = jsch.getSession(getUserName(), "127.0.0.1", assignedPort);
session.setPassword(getHostPassword());
userInfo = new UserInfo();
userInfo.setPassword(getHostPassword());
session.setUserInfo(userInfo);
session.setHostKeyAlias(host);
session.connect();
连接到目标主机时出现以下异常:
Caused by: com.jcraft.jsch.JSchException: reject HostKey: 127.0.0.1
at com.jcraft.jsch.Session.checkHost(Session.java:799)
at com.jcraft.jsch.Session.connect(Session.java:345)
at com.jcraft.jsch.Session.connect(Session.java:183)
我正在尝试通过jumphost1.com 登录主机host1.com
- 登录
jumphost1.com - 然后 ssh
host1.com - 执行
host1中的命令
【问题讨论】:
-
我不知道 jsch,但从你所说的
127.0.0.1在你的jsch.getSession(...)中,这里无关,应该是jumphost1.com或者host1.com -
JSCH 是 java 库,参考下面的例子jcraft.com/jsch/examples/JumpHosts.java.html
-
好吧,没关系,您的代码似乎与示例一致(连接到第一台服务器,然后从该服务器获取
127.0.0.1上的会话)。我得让熟悉工具的人回答,祝你好运!
标签: java unix ssh jsch portforwarding