web-dev-qa-db-ja.com

JSchでジャンプホストを介してリモートホストに接続するときに「HostKeyを拒否」

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();

宛先ホストへの接続時の例外以下の取得:

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)

ホストHost1.comからjumphost1.comにログインしようとしています

  • jumphost1.comにログイン
  • 次にssh Host1.com
  • Host1のコマンドを実行する
6
Rajar R

Jumphostを介して接続するためのコードは正しいです。

唯一の問題は、ローカルのホストキーリポジトリに、実際の(2番目の)ホストから受け取ったものとは異なる2番目のホストのホストキーが含まれていることです。

ジャンプホストセッションにStrictHostKeyChecking=noを設定しているため、実際にはセキュリティを気にしていないようです(-- 公式の例 正しく行いません!)ただし、2番目のセッションでは同じことを行わないため、エラーが発生します。

関連項目 解決方法Java UnknownHostKey、JSch SFTPライブラリの使用中?

5
Martin Prikryl