Java 如何执行多个命令

Java 如何执行多个命令,java,jsch,Java,Jsch,我想: 使用主机名、用户名、密码和端口号登录putty。 我已经做到了这一点 登录后,我想连接到server1。通常在腻子里我们 使用ssh命令(ssh)连接user@server1) 连接到该服务器后。我需要运行多个命令,如: df-kh ps-ef | grep www 在执行上述命令之后,我需要从 服务器1,需要登录到服务器2 我如何在JSCH中完成它 JSch jsch=new JSch(); Session session=jsch.getSession(remoteHostUser

我想:

  • 使用主机名、用户名、密码和端口号登录putty。 我已经做到了这一点
  • 登录后,我想连接到server1。通常在腻子里我们 使用ssh命令(ssh)连接user@server1)
  • 连接到该服务器后。我需要运行多个命令,如:
  • df-kh ps-ef | grep www

  • 在执行上述命令之后,我需要从 服务器1,需要登录到服务器2
  • 我如何在JSCH中完成它

    JSch jsch=new JSch();
    
    Session session=jsch.getSession(remoteHostUserName, RemoteHostName, remoteHostPortNo);
    session.setPassword(remoteHostpassword);
    
    Properties config = new Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    
    System.out.println("Please wait...");
    session.connect();
    System.out.println("Connected "+remoteHostUserName+"@"+RemoteHostName);
    
    ChannelExec channel=(ChannelExec) session.openChannel("shell");
    BufferedReader in=new BufferedReader(new InputStreamReader(channel.getInputStream()));
    
    channel.setCommand("df -kh");
    channel.setCommand("pwd");
    channel.connect();
    

    尝试
    ChannelShell channel=(ChannelShell)session.openChannel(“shell”)设置
    inputStream
    outputStream
    并随后执行以下循环:

    • 写入连接的inputStream并刷新它
    • 从连接的输出流中读取

    这样,您甚至可以基于第一个命令的结果构造第二个命令。

    为了创建交互式会话,您可以参考jsch开发人员提供的示例类

    创建通道对象作为Shell的实例 即

    然后设置该通道对象的输入和输出流

      channel.setInputStream(System.in);
      channel.setOutputStream(System.out);
    
    然后连接频道

    这样,在每次comand执行之后,通道将不会关闭,并且可以保持上一个命令的状态


    使用上述代码,您可以在控制台中创建交互式会话

    您可以使用以下方法运行多个命令

    将所有命令放在一个字符串中,用分隔符分隔

    "command1;command2...."
    
    可能的重复可能的重复
    "command1;command2...."