如何执行多个命令

时间:2015-06-04 11:42:27

标签: java jsch

我想:

  1. 使用主机名,用户名,密码和端口号登录putty。 我已经实现了这一目标。
  2. 登录后,我想连接到server1。通常在腻子我们 使用ssh命令连接(ssh user @ server1)。
  3. 一旦我连接到该服务器。我需要运行多个命令,如:
  4.   

    df -kh ps -ef | grep www

    1. 执行上述命令后,我需要退出 server1,需要登录server2。
    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();
      

3 个答案:

答案 0 :(得分:1)

尝试{object-id}/comments设置ChannelShell channel = (ChannelShell) session.openChannel("shell");inputStream,然后执行以下循环:

  • 写入已连接的inputStream并将其刷新
  • 从连接的outputStream中读取

这样你甚至可以根据第一个命令的结果构建你的第二个命令。

答案 1 :(得分:0)

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

http://www.jcraft.com/jsch/examples/UserAuthKI.java

将Channel对象创建为Shell的实例 即

  Channel channel=session.openChannel("shell");

然后为该Channel对象设置输入和输出流。

  channel.setInputStream(System.in);
  channel.setOutputStream(System.out);

然后连接频道。

这样,在每次执行命令后,通道都不会被关闭,上一个命令的状态可以保持不变。

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

答案 2 :(得分:0)

您可以使用以下方法

运行多个命令

将所有命令放在以;;

分隔的字符串中
"command1;command2...."