当前位置: 首页 > 知识库问答 >
问题:

jsch:在多级ssh之后运行命令

仉磊
2023-03-14
public static void main(String[] args) {

    String user="User0";
    String ip="IP0";
    int port=22;
    String password="Password0";
            JSch jsch= new JSch();
            Session session=null;
            ChannelExec channel=null;
            try {
                session=(jsch.getSession(user, ip, port));
                session.setConfig("StrictHostKeyChecking", "no");
                session.setPassword(password);
                session.connect();
                String dir=Reomte_DIR;  
                String cmd1=SomeComplexCommand;
                String cmd2=SomeMoreComplexCommand;
                channel = (ChannelExec) session.openChannel("exec");
                channel.setInputStream(null);
                channel.setCommand("ssh User1@IP1_PasswordLessLogin;ssh User2@IP2_PasswordLessLogin; "+cmd1+" ; "+cmd2+" ;");
                channel.setPty(true);
                channel.connect(4000);
                String res = null;
                    BufferedReader input = new BufferedReader(new InputStreamReader(channel.getInputStream()));
                    BufferedReader error = new BufferedReader(new InputStreamReader(channel.getErrStream()));
                    if ((res = error.readLine()) == null) {
                        res = input.readLine()+input.readLine()+input.readLine()+input.readLine();
                    } else {

                        res = "-1";
                    }
                System.out.println("result:"+res);

            } catch (JSchException e) {
                e.printStackTrace();
            }catch (IOException e) {
                e.printStackTrace();
            }finally {
                channel.disconnect();
                session.disconnect();
            }       
        }

Infactchannel.getInputStream()挂起。如果我删除多级ssh,一切都很好!我做错什么了吗??

我从以下方面得到了一些提示:Java中的多级SSH登录和使用JSch的多个命令,但我无法运行代码。

共有1个答案

督辉
2023-03-14

你的命令错了。

您的命令将执行第一个命令ssh user1@ip1_passwordlesslogin

然后它会等待它完成后再执行第二个命令。

    null
ssh User1@IP1_PasswordLessLogin ssh User2@IP2_PasswordLessLogin "<cmd1> ; <cmd2>"
 类似资料:
  • 我正在寻找一个解决方案,采取SSH连接,然后是Telnet连接到远程系统通过Java。由于只有使用telnet连接,我才能在远程计算机上执行该特定命令。 在大量浏览之后,我找到了这个答案“https://stackoverflow.com/questions/27146991/running-telnet-command-on-remote-ssh-session-using-jsch”,但是在执

  • 我试图在unix中使用JSCHSSH类(com.jcraft.jsch)执行一些工具。我的工具有一个选择菜单。我需要转到工具所在的文件夹,执行它并选择请求的选项。在每个命令之后,(cd,execute,…)我希望检查输出并检查状态代码(0/1)。我有下面的代码按预期执行它,但在这段代码中,我找不到一种方法来检查每个命令后的输出。 我无法找到一种方法,但我怎么能分开的命令,并打印他们一个接一个(在同

  • 问题内容: 我正在SSH shell会话上运行命令,为了获得该命令,我在官方示例后面使用了JSch 。 我也在 StackOverflow* 上也遵循此示例编写了自己的代码 * 这是 我的代码: 看起来不错,但奇怪的是 它只能在调试模式下工作 。如果我运行它,程序将无法执行。我认为它锁定 了while循环, 但是我不明白为什么。没有while循环,代码将到达终点,但是不执行任何shell命令。 我

  • 我目前正在尝试编写一个android应用程序,该应用程序通过ssh对远程机器执行简单的“ls”命令。我尝试使用JSch和此页面,但似乎不起作用。我环顾四周,似乎必须实现一些Async任务来运行代码。以下是当前主要活动的整个代码: 在Androidanifest.xml中添加uses-权限android: name="android.permission.INTERNET" 这是我第一次尝试任何严肃

  • 我使用Netbeans作为IDE 你能帮我找出问题吗?!

  • 我可以运行常规命令,如rm /home/user/Desktop/file但当我不能运行root命令。 我的目的是配置一个squid服务,运行如下命令:apt get install squid service squid start service 但是这些命令需要超级用户身份验证。 有人知道怎么修吗?谢啦