java - 在 ssh 中执行命令序列

标签 java ssh sshj

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

相关文章:

java - 下拉菜单中的 i18n 使用 s :select tag

java - 导出后,java无法显示图像

perl - 在运行时通过 SSH 显示命令的输出

java - 如何避免垃圾回收 IBM Java/JVM 中的 Stop the World Events

java - Android 相机每秒无法拍照

linux - 通过 ssh 导入远程变量

ssh - 通过SSH访问Neo4J Shell?

Android sshj发送多个命令,报错

java - sshj 使用 nohup 执行脚本