gpt4 book ai didi

java - 在 ssh 中执行命令序列

转载 作者:搜寻专家 更新时间:2023-10-30 21:38:07 27 4
gpt4 key购买 nike

我需要使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com