使用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
- Amazon Linux/Amazon Linux 2:
内容的提问来源于stack exchange,提问作者Yash Gadgil
相关产品推荐
相关产品推荐

