【发布时间】:2018-07-17 18:33:43
【问题描述】:
我想创建一个从 Windows 系统到使用 RSA 令牌密码进行身份验证的 Linux 机器的连接,并且我想运行 shell 命令并从 Java 代码中获取输出。使用 putty 登录该 Linux 系统时,有以下步骤:
- 输入IP和端口并连接
- 在要求“登录为:”的 PuTTY 终端中输入用户名
- 在我们输入 RSA SecurID 的地方输入 PASSCODE
我已经尝试使用Jsch 包进行连接,但无法连接。我还尝试了jcabi-ssh (http://ssh.jcabi.com/),它是Jsch 的包装器。它们似乎都不适合我。
编辑:我使用Jsch 包使用以下代码
String host = "xxx";
String user = "xxx";
String password;
Scanner scanner = new Scanner (System.in);
System.out.println("Enter rsa token: ");
password = scanner.nextLine();
Session session = jsch.getSession(user, host, 2222);
session.setPassword(password);
session.connect();
之后出现以下错误:
com.jcraft.jsch.JSchException: UnknownHostKey: myservername. RSA key fingerprint is ba:2b:70:2f:4f:fa:f6:20:31:56:e0:e8:8b:16:46:c9
我找到了一个解决方案,有人说包括这段将 StrictHostKeyChecking 设置为“no”的代码:
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
然后我的错误变为:
com.jcraft.jsch.JSchException: Auth cancel
尝试使用其他 jcabi-ssh 实现会得到类似的结果。
【问题讨论】:
-
“它没有连接” - 即第 1 步失败?所以你还没有得到 RSA 令牌?
-
或者是 TCP 还是 TCP 连接已经建立,但是一些协商失败了?您是否收到任何错误消息或异常?
-
@Rup 检查编辑
-
谢谢。 Auth cancel 听起来它没有可以使用的身份验证方法。也许 RSA 令牌值在内部具有与密码不同的代码?我认为你最好的选择是在 JSch 中找到生成取消的代码并找出原因,如果是因为它找不到通用的身份验证方法,那么检查客户端和服务器都知道哪些值。
-
我已经快速浏览了 SourceForge 的 JSch 代码 - 烦人的是我没有可以链接到的源浏览器,但这里是 an old snapshot on GitHub 并且相关位没有改变。看起来这是由 JschAuthCancelException 触发的,所以如果你可以让你的调试器打破它,这将帮助你追踪它的来源:它是由它无法解密的公钥触发的,或者没有密码验证密码,或者如果它无法显示密码提示(或者如果用户取消了交互式密码提示)。
标签: java linux ssh sftp securid