我需要使用 sshj 库通过 ssh 在远程服务器上执行一些命令序列。
我愿意
Session session = ssh.startSession();
Session.Command cmd = session.exec("ls -l");
System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
cmd.join(10, TimeUnit.SECONDS);
Session.Command cmd2 = session.exec("ls -a");
System.out.println(IOUtils.readFully(cmd2.getInputStream()).toString());
这让我很吃惊
net.schmizz.sshj.common.SSHRuntimeException: This session channel is all used up
但我无法为每个命令重新创建 session ,因为此示例将显示主目录列表,而不是/some/dir 列表。
最佳答案
尽管很奇怪,session
只能使用一次。所以你每次都必须重置 session 。
Session session = ssh.startSession();
Session.Command cmd = session.exec("ls -l");
System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
cmd.join(10, TimeUnit.SECONDS);
session = ssh.startSession();
Session.Command cmd2 = session.exec("ls -a");
System.out.println(IOUtils.readFully(cmd2.getInputStream()).toString());
或者如果您要连接的 shell 支持定界命令(并且情况允许),您可以这样做(bash 示例):
session.exec("ls -l; <command 2>; <command 3>");
关于java - 在 ssh 中执行命令序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22723538/