2

我正在为 java 使用 sshj 库。

我需要在远程服务器上打开一个 ssh 会话,执行一个可以运行几分钟的命令,然后继续在我的 java 代码中执行。一旦在远程服务器上运行的命令完成,我希望 ssh 会话关闭,并且 sshclient 断开连接。

我看过以下代码示例:

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

        ssh.connect("localhost");
        try {
            ssh.authPublickey(System.getProperty("user.name"));
            final Session session = ssh.startSession();
            try {
                final Command cmd = session.exec("ping -c 1 google.com");
                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();
        }
    }
}

基本上我不想等待命令完成(没有cmd.join调用),并且我需要在命令退出后自动调用session.close()and 。ssh.disconnect()这可能吗?

4

1 回答 1

2

我可能无法准确回答我的问题,但可能会为其他尝试做与我正在做的事情类似的事情的人提供帮助。当我发布时,我的印象是 ssh 会话必须保持打开状态才能完成命令,但我认为情况并非如此。

所以我想做的是通过java启动一个远程ssh会话,并在远程机器上运行一个shell脚本。shell 脚本可能需要 10-15 分钟才能完成。我测试了一个短暂的超时(5 秒),并且脚本在会话断开后继续运行......这就是我想要的。

于 2013-07-15T21:13:14.267 回答