使用JSch通过jumphost连接到远程主机时"拒绝HostKey"

Raj*_*r R 6 java unix ssh portforwarding jsch

需要通过jumphost SSH到目标主机.曾尝试过在JSch JumpHosts示例中提到的相同内容.

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();
Run Code Online (Sandbox Code Playgroud)

连接到目标主机时获得以下异常:

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)
Run Code Online (Sandbox Code Playgroud)

我试图登录到主机host1.com通过jumphost1.com

  • 登录到 jumphost1.com
  • 然后是ssh host1.com
  • 执行中的命令 host1

Mar*_*ryl 5

您通过Jumphost连接的代码正确。

唯一的问题是,本地主机密钥存储库包含的第二个主机的主机密钥与从真实(第二个)主机收到的主机密钥不同。

实际上,正如您为Jumphost会话设置的那样,您实际上似乎并不关心安全性StrictHostKeyChecking=no官方示例正确地做到了这一点!)。但是对于第二个会话,您不会执行相同的操作,因此会出现错误。

另请参阅在使用JSch SFTP库时如何解析Java UnknownHostKey?