我正在使用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()
和ssh.disconnect()
。这可能吗?
答案 0 :(得分:1)
我可能无法准确回答我的问题,但可能会为其他人尝试做与我正在做的事情类似的事情提供帮助。当我发布时,我的印象是ssh会话必须保持打开以完成命令,但我不认为是这种情况。
所以我试图做的是通过java启动一个远程ssh会话,并在远程机器上运行一个shell脚本。 shell脚本最多可能需要10-15分钟才能完成。我测试了一个短暂的超时(5秒),并且在会话断开后脚本继续运行...这就是我想要的。