使用JSch在远程SSH会话上运行telnet命令

奈尔斯

我正在telnetSSH Shell会话上运行命令,为了获得该命令,我在官方示例后面使用了JSch

我也在StackOverflow也遵循此示例编写了自己的代码

这是我的代码:

package Utility;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;


public class JavaTelnet {

    public static void main(String[] arg) {
        try {
            System.out.println(telnetConnection(USER_ID,PASSWORD,REMOTE_HOST));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String telnetConnection(String user, String password, String host) throws JSchException, Exception {
      JSch jsch=new JSch();
      Session session=jsch.getSession(user, host, 22);
      session.setPassword(password);
      // It must not be recommended, but if you want to skip host-key check,
       session.setConfig("StrictHostKeyChecking", "no");

      session.connect();
      //session.connect(30000);   // making a connection with timeout.

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

      channel.connect();

      DataInputStream dataIn = new DataInputStream(channel.getInputStream());
      BufferedReader reader = new BufferedReader(new InputStreamReader(dataIn));
      DataOutputStream dataOut = new DataOutputStream(channel.getOutputStream());

      dataOut.writeBytes("telnet localhost 4242\r\n");
/*
* telnet COMMANDS here
*/
      dataOut.writeBytes("exit\r\n");
       dataOut.writeBytes("logout\r\n");
       dataOut.flush();

      String line = reader.readLine();
      String result = line +"\n";

      while ((line= reader.readLine())!=null){
          result += line +"\n";

      }

      dataIn.close();
      dataOut.close();
      System.out.println("disconnecting....");
      channel.disconnect();
      session.disconnect();

      return "done";   

  }

}

看起来不错,但奇怪的是它只能在调试模式下工作如果我运行它,程序将无法执行。我认为它锁定了while循环,但是我不明白为什么。没有while循环,代码将到达末尾,但不执行任何shell命令。

我正在使用Netbeans作为IDE

您能帮我发现问题吗?

奈尔斯

我得到了它。

在while循环中,line永远不会为null

为何在调试中起作用仍是一个谜。

我正在发布新代码我希望它对每个想做类似事情的人都有帮助。

package Utility;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;


public class JavaTelnet {

    public static void main(String[] arg) {
        try {
            System.out.println(telnetConnection(YOUR_COMMAND,YOUR_USER,YOUR_PASS,YOUR_HOST));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String telnetConnection(String command, String user, String password, String host) throws JSchException, Exception {
      JSch jsch=new JSch();
      Session session=jsch.getSession(user, host, 22);
      session.setPassword(password);
      // It must not be recommended, but if you want to skip host-key check,
       session.setConfig("StrictHostKeyChecking", "no");

      session.connect(3000);
      //session.connect(30000);   // making a connection with timeout.

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

      channel.connect(3000);

      DataInputStream dataIn = new DataInputStream(channel.getInputStream());
      BufferedReader reader = new BufferedReader(new InputStreamReader(dataIn));
      DataOutputStream dataOut = new DataOutputStream(channel.getOutputStream());

      System.out.println("Starting telnet connection...");
      dataOut.writeBytes("telnet localhost 4242\r\n");
//      dataOut.writeBytes("enable\r\n");
      dataOut.writeBytes(command+"\r\n");
      dataOut.writeBytes("exit\r\n"); //exit from telnet
       dataOut.writeBytes("exit\r\n"); //exit from shell
       dataOut.flush();

      String line = reader.readLine();
      String result = line +"\n";

        while (!(line= reader.readLine()).equals("Connection closed by foreign host")){
          result += line +"\n";
      }

      dataIn.close();
      dataOut.close();
      channel.disconnect();
      session.disconnect();

      return result;   

  }

}

注意,该外壳是Linux外壳。在Windows中,“退出”命令应该不同

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用脚本在SSH服务器上远程运行命令

来自分类Dev

使用脚本在ssh服务器上远程运行命令

来自分类Dev

使用SSH在远程Linux服务器上运行命令

来自分类Dev

Rundeck:使用 ssh 在远程服务器上运行命令

来自分类Dev

在&符号后和远程ssh会话中运行命令

来自分类Dev

通过运行单行命令使用telnet测试远程TCP端口

来自分类Dev

使用远程命令进行 SSH 并保持会话处于活动状态

来自分类Dev

如何使用sudo权限从Jenkins运行远程ssh会话?

来自分类Dev

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

来自分类Dev

使用ssh使用参数和shell运行远程命令

来自分类Dev

如何使用Java中的JSch SSH会话使用需要交互式终端的命令行* nix命令?

来自分类Dev

如何在Java中通过JSch SSH会话使用需要交互式终端的命令行* nix命令?

来自分类Dev

在远程Linux上运行命令

来自分类Dev

在同一会话上远程运行mpirun和ssh-add

来自分类Dev

在JSch(ssh)中使用root命令

来自分类Dev

无法使用jsch运行top命令

来自分类Dev

在vagrant ssh之后运行远程命令

来自分类Dev

通过SSH在后台运行远程命令

来自分类Dev

在vagrant ssh之后运行远程命令

来自分类Dev

如何运行 ssh 命令并让变量远程扩展

来自分类Dev

使用SSH访问当前的远程会话

来自分类Dev

每次我通过ssh登录到远程服务器时如何自动运行命令而不断开会话

来自分类Dev

如何使用IdentityFile通过SSH通过SSH远程运行sudo命令?

来自分类Dev

如何使用ssh在远程Unix计算机上运行命令并在命令完成之前退出?

来自分类Dev

使用JSCH的SSH连接,Android上的UnknownHostException

来自分类Dev

通过SSH在远程服务器上运行命令-无需退出

来自分类Dev

通过SSH在远程服务器上运行命令-无需退出

来自分类Dev

如何在远程ssh会话上使用awk打印特定列?

来自分类Dev

如何在ssh上使用sudo运行分离命令?

Related 相关文章

  1. 1

    使用脚本在SSH服务器上远程运行命令

  2. 2

    使用脚本在ssh服务器上远程运行命令

  3. 3

    使用SSH在远程Linux服务器上运行命令

  4. 4

    Rundeck:使用 ssh 在远程服务器上运行命令

  5. 5

    在&符号后和远程ssh会话中运行命令

  6. 6

    通过运行单行命令使用telnet测试远程TCP端口

  7. 7

    使用远程命令进行 SSH 并保持会话处于活动状态

  8. 8

    如何使用sudo权限从Jenkins运行远程ssh会话?

  9. 9

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

  10. 10

    使用ssh使用参数和shell运行远程命令

  11. 11

    如何使用Java中的JSch SSH会话使用需要交互式终端的命令行* nix命令?

  12. 12

    如何在Java中通过JSch SSH会话使用需要交互式终端的命令行* nix命令?

  13. 13

    在远程Linux上运行命令

  14. 14

    在同一会话上远程运行mpirun和ssh-add

  15. 15

    在JSch(ssh)中使用root命令

  16. 16

    无法使用jsch运行top命令

  17. 17

    在vagrant ssh之后运行远程命令

  18. 18

    通过SSH在后台运行远程命令

  19. 19

    在vagrant ssh之后运行远程命令

  20. 20

    如何运行 ssh 命令并让变量远程扩展

  21. 21

    使用SSH访问当前的远程会话

  22. 22

    每次我通过ssh登录到远程服务器时如何自动运行命令而不断开会话

  23. 23

    如何使用IdentityFile通过SSH通过SSH远程运行sudo命令?

  24. 24

    如何使用ssh在远程Unix计算机上运行命令并在命令完成之前退出?

  25. 25

    使用JSCH的SSH连接,Android上的UnknownHostException

  26. 26

    通过SSH在远程服务器上运行命令-无需退出

  27. 27

    通过SSH在远程服务器上运行命令-无需退出

  28. 28

    如何在远程ssh会话上使用awk打印特定列?

  29. 29

    如何在ssh上使用sudo运行分离命令?

热门标签

归档