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

使用JSch 0.1.55连接AWS EC2实例时遇Auth fail异常求助

JSch连接Amazon EC2实例出现Auth fail异常的解决办法

问题背景

使用JDK 19搭配JSch 0.1.55库连接Amazon EC2实例,通过Putty和CMD手动登录正常,但Java代码执行时抛出认证失败异常:

com.jcraft.jsch.JSchException: Auth fail
    at com.jcraft.jsch.Session.connect(Session.java:519) ~[jsch-0.1.55.jar:na]
    at com.jcraft.jsch.Session.connect(Session.java:183) ~[jsch-0.1.55.jar:na]
    at com.example.CloudRESTAPI.Service.CloudRESTServiceImpl.executeCommands(CloudRESTServiceImpl.java:136) ~[classes/:na]
    at com.example.CloudRESTAPI.Controller.MyController.commandsCall(MyController.java:67) ~[classes/:na]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na]

使用的核心代码:

JSch jsch = new JSch();
jsch.addIdentity("D:\Keys\EC2CheckKey.pem");
Session session=jsch.getSession("ec2-user", "13.48.47.179", 22);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect(); // Exception Occuring
System.out.println("Connected");

排查与解决步骤

  • 修正私钥路径转义
    Windows系统下,文件路径的反斜杠需要双重转义,否则会被解析为特殊字符。将路径修改为:

    jsch.addIdentity("D:\\Keys\\EC2CheckKey.pem");
    

    或者使用正斜杠避免转义问题:

    jsch.addIdentity("D:/Keys/EC2CheckKey.pem");
    
  • 检查私钥文件权限
    SSH协议要求私钥文件权限必须严格限制:

    • Windows系统:右键.pem文件→属性→安全→高级,删除除当前用户外所有用户的权限,确保只有你能读取该文件。
    • Linux系统:执行命令chmod 600 EC2CheckKey.pem,将权限设置为仅所有者可读可写。
  • 传入私钥密码(若有设置)
    如果你的.pem文件设置了保护密码,需要在addIdentity方法中指定密码参数:

    jsch.addIdentity("D:\\Keys\\EC2CheckKey.pem", "你的密钥密码");
    
  • 升级JSch版本
    JSch 0.1.55是2016年的旧版本,存在与JDK 19及新版SSH协议的兼容性问题。建议升级到最新稳定版,新版本修复了大量认证相关的Bug。

  • 开启调试日志定位问题
    添加JSch日志输出,查看认证过程的详细信息:

    JSch.setLogger(new JSch.Logger() {
        @Override
        public boolean isEnabled(int level) {
            return true;
        }
    
        @Override
        public void log(int level, String message) {
            System.out.println(message);
        }
    });
    

    通过日志可以明确是密钥加载失败、EC2实例拒绝认证还是协议不匹配等具体原因。

  • 确认EC2实例用户名
    不同EC2镜像的默认用户名不同,确保代码中的用户名与手动登录时一致:

    • Amazon Linux/Amazon Linux 2:ec2-user
    • Ubuntu:ubuntu
    • CentOS:centos
    • RHEL:ec2-user或root

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:43:17