Java通过SSH连接路由器,输入命令并读取响应

这篇具有很好参考价值的文章主要介绍了Java通过SSH连接路由器,输入命令并读取响应。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近需要读取和修改华为路由器的配置,使用Java语言开发,通过SSH连接,输入命令并读取响应。

1.添加mwiede/jsch依赖

  • 如果使用Maven,可以在pom.xml文件中添加以下依赖:
<dependencies>
    <dependency>
        <groupId>com.github.mwiede</groupId>
        <artifactId>jsch</artifactId>
        <version>0.2.15</version>
    </dependency>
</dependencies>
  • 如果使用Gradle,则添加到build.gradle文件:
dependencies {
    implementation 'com.github.mwiede:jsch:0.2.15'
}

2.使用Jsch创建SSH连接,输入命令并返回响应

/** 
*  获取SSH命令响应
* @param userName        用户名
* @param password        密码
* @param host              ip地址
* @param port              端口
* @param commandList  命令列表
*/
public String getShellCmdRes(String userName, String password, String host, Integer port, List<String> commandList) throws JSchException, IOException {
        StringBuilder stringBuilder = new StringBuilder();
        JSch jsch = new JSch();
        Session session = jsch.getSession(userName, host, port());
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();

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

        // 获取输入输出流
        OutputStream inputStreamForTheChannel = channel.getOutputStream();
        InputStream outputStreamForTheChannel = channel.getInputStream();

        // 连接通道
        channel.connect();

        PrintStream commander = new PrintStream(inputStreamForTheChannel, true);

        byte[] tmp = new byte[1024];
        while (true) {
            while (outputStreamForTheChannel.available() > 0) {
                int i = outputStreamForTheChannel.read(tmp, 0, 1024);
                if (i < 0) {
                    break;
                }
                String output = new String(tmp, 0, i);
                // 读取响应
                stringBuilder.append(output);
                stringBuilder.append(System.lineSeparator());
                // 发送命令
                commandList.forEach(command -> {
                    commander.println(command);
                });
            }
            if (channel.isClosed()) {
                if (outputStreamForTheChannel.available() > 0) {
                    continue;
                }
                break;
            }
            try {
                Thread.sleep(10);
            } catch (Exception ee) {
            }
        }

        // 关闭通道和会话
        channel.disconnect();
        session.disconnect();
        return stringBuilder.toString();
    }

3.调用上文方法

3.1 单条命令

记得结束时加入退出语句,这里以路由器为例,用quit退出

List<String> commandList = new  ArrayList<>();
// 查看
commandList.add("display bfd session all");
// 退出会话
commandList.add("quit");
// 获取响应
String response = getShellCmdRes("admin", "admin", "1.1.1.1", 22, commandList);

Java通过SSH连接路由器,输入命令并读取响应

3.2 多条命令

如果是多条命令,每进入一个会话,就多一个退出语句

List<String> commandList = new ArrayList<>();
// 进入system-view
commandList.add("system-view");
// 进入Tunnel 0/0/5
commandList.add("interface Tunnel 0/0/5");
// 查看信息
commandList.add("display this");
// 退出Tunnel 0/0/5
commandList.add("quit");
// 退出system-view
commandList.add("quit");
// 退出会话
commandList.add("quit");
// 获取响应
String response = getShellCmdRes("admin", "admin", "1.1.1.1", 22, commandList);

Java通过SSH连接路由器,输入命令并读取响应文章来源地址https://www.toymoban.com/news/detail-780444.html

到了这里,关于Java通过SSH连接路由器,输入命令并读取响应的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Win10 显示WLAN不安全,并且链路速度54/54 (Mbps),通过K3C路由器修改协议解决,无线网卡连接速度只有54Mbps

    使用有线等同隐私(WEP)或临时密钥完整性协议(TKIP)加密配置时,客户端设备的WiFi数据传输速率不会超过54Mbps, 我用的是K3C路由器,今天跑百度网盘感觉很奇怪,突然就只有10MB/s了,感觉很奇怪,明明家里的是300Mbps的网络,但是奇怪的是一台安卓一台苹果都能跑满。 在右下角

    2024年02月14日
    浏览(40)
  • 小米路由器配置ssh登入方法教程

    小米路由器使用的是Linux内核,可以用ssh来管理。 复制代码 代码如下: root@XiaoQiang:/userdisk# cd ~ root@XiaoQiang:~# uname -a Linux XiaoQiang 2.6.36.4brcmarm #2 SMP PREEMPT Sat Apr 26 03:16:17 CST 2014 armv7l GNU/Linux root@XiaoQiang:~# free -m total used free shared buffers cached Mem: 249 107 141 0 3 47 -/+ buffers/cache: 56 192 Sw

    2024年02月08日
    浏览(44)
  • 光纤怎么连接无线路由器?光纤连接无线路由器方法

      光纤连接无线路由器方法如下: 第一步:硬件部分的连接。 用一根网线将光猫的任意一个网口与无线路由器的WLAN口相连,局域网中的其它电脑需要通过有线方式上网的,就可以通过网线将电脑的网上与无线路由器的LAN口相连即可。 第二步:重新设置路由器的IP地址。 在与

    2024年02月07日
    浏览(48)
  • 两台路由器怎么连接?两个路由器连接设置图文教程

    两个路由器连接最常见的情况是家中已有一个路由器,并且已经通过这个路由器来正常上网。现在是因某些原因想在不改变已经在用的路由器的设置的情况下增加一个无线路由器。而直接接上去可能会造成两台都不能上网了。那么两台路由器怎么连接?下面yii666就为大家详细介

    2024年02月07日
    浏览(49)
  • H3C路由器如何配置SSH服务?

    通常设备会放在弱电箱里而我们的办公地点往往不在同一个地方,为了更加便捷的对设备进行管理我们通常会使用TelentSSH服务。 这边不再重述过多定义,您可以直接理解为他是可以实现利用IP网络对设备进行 远程管理 登录的一种功能,如需定义可自行百度,本文以配置教学

    2024年02月07日
    浏览(40)
  • 路由器怎么设置后面再连接若干个路由器?

    我们在平时的上网中有时会遇到这样的问题,A房间有一台无线路由器,B房间到A房间距离太远,信号太弱,我们要在B房间或C房间用手机、平板电脑或者笔记本上无线网的时候信号可能就不好了,那么应该怎么办呢?其实很简单在B屋或者C屋加个无线路由器就可以了,其实路由

    2024年02月08日
    浏览(44)
  • 路由器和另一个路由器怎么设置连接?

    我们在日常上网中有时会遇到这样的问题:A房间有一无线路由器,B房间到A房间有七八十米,我们要在B房间再用手机上无线网的时候信号可能就不好了,中间又有墙,哪么应该怎么办呢?呵呵,其实很简单在B屋加个无线路由用网线接到A就可以了,其实路由后再接路由跟无线是没有关系

    2024年02月08日
    浏览(47)
  • 华为路由器/交换机配置telnet,ssh远程登录

    常见的远程登录方式有telnet、ssh和密钥3种方式,在实际生产环境中,为了确保数据的传输安全,不推荐使用telnet。下面对3种方式分别进行测试。 AAA:3A认证,即:认证(Authentication);授权(Authorization);计帐(Accounting)。 cipher参数将密码在配置中加密显示。 privilege权限范围0-15,

    2024年02月11日
    浏览(46)
  • 无线路由器连接有线路由器的两种方案

    无线路由器连接有线路由器设置 描述:无线路由器tp-link tl-wr841n 连接有线路由器tp-link(具体型号不清)下面的设置都是以这两个路由器为例进行设置 目的:想从有线路由器接到无线路由器,实现无线上网功能 说明:无线连接有线两种方案: 1.无线wan口连接有线lan口 2.无线lan口

    2024年02月07日
    浏览(56)
  • NAT 地址转换路由器配置命令(华为路由器)

      #AR1路由器配置 # acl 2000    rule permit source any # interface GigabitEthernet0/0/1  nat outbound 2000  ip address 1.1.1.1 24 # interface GigabitEthernet0/0/0  ip address 172.16.1.1 255.255.255.0  # ip route-static 0.0.0.0 0.0.0.0 1.1.1.2 ip route-static 192.168.10.0 255.255.255.0 172.16.1.2 ip route-static 192.168.20.0 255.255.255.0 172.16.1.

    2024年02月17日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包