如何使用JAVA将字符串回显到SSH

时间:2016-10-29 06:56:56

标签: java ssh jsch sshj

我正在尝试使用基于公钥/私钥的身份验证通过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();
    }
}

1 个答案:

答案 0 :(得分:0)

下面的代码使用了JSCH Library,我正在努力: -

        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的密钥库