You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端用JSch库实现手机SSH连路由器时遇超时错误求助

解决JSch SSH连接超时问题

那个OpenGL的警告日志可以直接忽略,它和你的SSH连接问题没有任何关联,咱们重点解决com.jcraft.jsch.JSchException: timeout: socket is not established这个错误:

  • 先确认基础网络连通性
    首先确保你的手机和路由器在同一个局域网内(比如都连同一个WiFi),然后手动测试手机能不能ping通路由器的IP。你可以用ADB命令执行:

    adb shell ping 192.168.1.1 # 替换成你的路由器实际IP
    

    如果ping不通,先排查WiFi连接是否正常、路由器的LAN口设置有没有限制设备接入。

  • 检查路由器的SSH服务状态
    绝大多数家用路由器默认是关闭SSH服务的,你需要登录路由器的管理后台(通常在浏览器输入路由器IP,比如192.168.1.1),找到“SSH设置”或者“远程管理”相关选项,确认:

    • SSH服务已经开启
    • 监听的端口是默认的22还是自定义端口(代码里要对应这个端口)
    • 没有限制仅特定IP可以访问SSH
  • 修正JSch连接代码的参数
    检查你的代码里有没有配置正确的参数,尤其是超时时间和主机信息:

    JSch jsch = new JSch();
    // 替换成你的路由器IP、SSH用户名、密码、端口
    Session session = jsch.getSession("admin", "192.168.1.1", 22);
    session.setPassword("your_router_password");
    
    // 测试阶段可以关闭主机密钥检查(生产环境不建议)
    session.setConfig("StrictHostKeyChecking", "no");
    // 设置更长的超时时间,比如30秒,避免因网络延迟导致超时
    session.setTimeout(30000);
    
    try {
        session.connect();
        // 连接成功后的逻辑
    } catch (JSchException e) {
        e.printStackTrace();
    }
    

    注意:不要用路由器的公网IP进行局域网连接,必须使用局域网私有IP(比如192.168.x.x、10.x.x.x这类)。

  • 检查Android应用的网络权限
    确保你的AndroidManifest.xml里已经添加了网络权限:

    <uses-permission android:name="android.permission.INTERNET"/>
    

    如果是Android 6.0及以上版本,还要确认已经动态申请了该权限;另外如果手机用的是移动数据,而路由器在WiFi局域网,这种跨网络的情况肯定无法连接,必须让手机和路由器在同一网络下。

  • 排查路由器的防火墙/访问控制
    有些路由器自带防火墙,会拦截SSH请求,你可以临时关闭路由器的防火墙功能,或者在访问控制列表里添加你的手机IP,允许其访问SSH端口。

内容的提问来源于stack exchange,提问作者Amir133

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:36:04