使用Java中的ssh2连接到由RSA SecurID保护的linux系统

使用Java中的ssh2连接到由RSA SecurID保护的linux系统,java,linux,ssh,sftp,securid,Java,Linux,Ssh,Sftp,Securid,我想创建一个从Windows系统到Linux机器的连接,该机器使用RSA令牌密码进行身份验证,我想运行shell命令并从Java代码获得输出。使用putty登录到该Linux系统时,有以下步骤: 输入IP和端口并连接 在PuTTY终端中输入用户名,询问“登录身份:” 在输入RSA SecurID的位置输入密码 我已经尝试使用Jsch包进行连接,但它没有连接。我还尝试了jcabi-ssh(),它是Jsch的包装器。他们似乎都不为我工作 编辑:我使用Jsch包使用了以下代码 Stri

我想创建一个从Windows系统到Linux机器的连接,该机器使用RSA令牌密码进行身份验证,我想运行shell命令并从Java代码获得输出。使用putty登录到该Linux系统时,有以下步骤:

  • 输入IP和端口并连接
  • 在PuTTY终端中输入用户名,询问“登录身份:”
  • 在输入RSA SecurID的位置输入密码
  • 我已经尝试使用
    Jsch
    包进行连接,但它没有连接。我还尝试了
    jcabi-ssh
    (),它是
    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密钥指纹是ba:2b:70:2f:4f:fa:f6:20:31:56:e0:e8:8b:16:46:c9

    我找到了一个解决方案,有人说包含这段将StrictHostKeyChecking设置为“否”的代码:

    然后我的错误变为:

    com.jcraft.jsch.JSchException: Auth cancel
    

    尝试使用另一个
    jcabi-ssh
    实现也会得到类似的结果。

    您需要的是一个对话框,它将在该时间点接受密码短语并建立连接。以下是您需要集成RSA SecureId的内容—

    “它无法连接”-即步骤1失败?因此,您没有获得RSA令牌?或者是TCP还是TCP连接已建立,但某些协商失败?您是否收到任何错误消息或异常?@Rup检查编辑记录。听起来它没有可以使用的身份验证方法。可能RSA令牌值的内部代码与密码不同?我认为最好的办法是在JSch中找到生成取消的代码,并找出原因,如果是因为找不到通用的身份验证方法,则检查客户端和服务器都知道哪些值。我快速查看了SourceForge中的JSch代码-令人恼火的是,我无法链接到任何源浏览器,但这是一个很好的例子,相关的部分没有改变。这看起来像是由JschAuthCancelException触发的,因此如果您可以让调试器中断它,这将帮助您跟踪它的来源:它由无法解密的公钥触发,或者由没有密码的密码验证触发,或者如果它无法显示密码提示(或者如果用户取消交互式密码提示)。该示例显然适用于私钥身份验证,而非SecureId,并且他已经有了想要使用的值-他不需要对话框。在您试图强调的代码中,他还应该做其他特定的事情吗?显然,您必须修改该代码。请使用com.rsa.authagent.authapi.AuthAgentException com.rsa.authagent。authapi.AuthSession com.rsa.authagent.authapi.AuthSessionFactory。您可以通过谷歌搜索使用rsa authagent的示例。
    com.jcraft.jsch.JSchException: Auth cancel