1

我正在尝试使用基于公钥/私钥的身份验证通过 SSH 执行远程查询。在本地主机和远程服务器之间共享公钥后,以下命令可以正常工作,并在 bash shell 上将所需的输出作为字符串提供给我。

echo 123456 12@13:14 ABCD abc1234 | ssh -T user@abc.xyz.com

如何使用 JSCH 或 SSHJ 或任何其他类似库通过 JAVA 实现相同的目标

这是我迄今为止使用 SSHJ 尝试过的,但它对我不起作用(连接成功但没有结果)

public static void main(String... args)throws IOException {
    final SSHClient ssh = new SSHClient();
    ssh.loadKnownHosts();

    ssh.connect("abc.xyz.com");
    try {
        ssh.authPublickey("user");
        final Session session = ssh.startSession();
        try {
            final Command cmd = session.exec("123456 12@13:14 ABCD abc1234");
            System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
            cmd.join(5, TimeUnit.SECONDS);
            System.out.println("\n** exit status: " + cmd.getExitStatus());
        } finally {
            session.close();
        }
    } finally {
        ssh.disconnect();
        ssh.close();
    }
}
4

1 回答 1

0

下面的代码使用了 JSCH 库,并且正在为我工​​作:-

        JSch jsch = new JSch();

        String path = "PATH TO PRIVATE KEY"; 

        jsch.addIdentity(path);

        jsch.setConfig("StrictHostKeyChecking", "no");

        Session session = jsch.getSession(userName, ipToConnect, portToConnect);
        session.connect();

        Channel channel = session.openChannel("exec");

        ((ChannelExec)channel).setCommand("COMMAND TO FIRE");

        channel.setInputStream(null);

        ((ChannelExec)channel).setErrStream(System.err);

        InputStream in = channel.getInputStream();

        channel.connect();

        //Read Response Here 

        channel.disconnect();
        session.disconnect();

注意:您也可以使用基于密码的身份验证,而不是使用 JSCH 的密钥库

于 2016-10-30T05:48:14.403 回答