如何使用Java中的Jsch lib通过键盘交互身份验证自动连接到ssh服务器

问题描述

我想使用jsch通过键盘交互式身份验证(或质询响应身份验证)自动连接到ssh服务器。 我已经像这样设置了userinfo和config

session.setUserInfo(myUserInfo);
session.setConfig("StrictHostKeyChecking","no");
session.setConfig("PreferredAuthentications","publickey,keyboard-interactive,password");

myUserInfo对象实现UserInfo interface 当我调试源代码时,总是会收到com.jcraft.jsch.JSchException:验证失败异常。 有人说myUserInfo应该实现UIKeyboardInteractive。 但是我无法理解官方的JSch UserAuthKI示例。太复杂了,难以理解。 我只想让连接自动化。 谁能给我一个简单的例子。 谢谢。

解决方法

我找到了解决方案。 让我们的myUserInfo类实现UIKeyboardInteractive接口。 并重写了这样的hintKeyKeyInteractive方法。

@Override
public String[] promptKeyboardInteractive(String destination,String name,String instruction,String[] prompt,boolean[] echo)
{
       System.out.println("#####promptKeyboardInteractive#####");
       System.out.println("destination: " + destination);
       System.out.println("name: " + name);
       System.out.println("instruction: " + instruction);
       System.out.println("prompt.length: " + prompt.length);
       System.out.println("prompt[0]: " + prompt[0]);
       System.out.println("echo[0]: " + echo[0]);
       String[] response=new String[prompt.length];
       response[0] = passwd;
       return response;
}

有效。我可以从ssh服务器获得连接。