Apache Camel SFTP私钥连接失败:Auth cancel认证错误求助
排查SFTP私钥连接「Auth cancel」错误的步骤
1. 校验私钥格式与JSch兼容性
WinSCP/FileZilla支持多种私钥格式,但JSch对部分新格式支持有限:
- 若私钥是OpenSSH新格式(开头为
-----BEGIN OPENSSH PRIVATE KEY-----),转换为RSA旧格式:ssh-keygen -p -m PEM -f /path/to/your/private-key - 若私钥是PuTTY
.ppk格式,用PuTTYgen导出为OpenSSH格式(选择「Conversions > Export OpenSSH key」)
2. 确保JSch版本与Camel适配
Apache Camel 4.0.1默认依赖的JSch可能和com.github.mwiede/jsch存在冲突,需排除自带依赖并指定兼容版本:
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-sftp-starter</artifactId> <exclusions> <exclusion> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.github.mwiede</groupId> <artifactId>jsch</artifactId> <version>0.2.17</version> </dependency>
3. 明确指定私钥配置与文件权限
- 在Camel SFTP端点中强制指定私钥路径(若有密码需同时配置):
from("sftp://user@host:port/path") .setHeader(SftpConstants.PRIVATE_KEY_FILE, constant("/absolute/path/to/private-key")) .setHeader(SftpConstants.PRIVATE_KEY_PASS_PHRASE, constant("your-passphrase")); - 私钥文件权限需严格设置:Linux/Unix设为
600,Windows确保文件未被系统权限锁定
4. 开启调试日志定位协商细节
开启SFTP调试日志,查看认证阶段的具体报错:
from("sftp://user@host:port/path?preferredAuthentications=publickey&debugLevel=3")
重点关注日志中是否出现key_verify failed、invalid key format等关键词,这类信息直接指向私钥兼容性问题
5. 对比目标SFTP服务器的SSH配置差异
因相同配置可连接另一台服务器,需检查目标服务器的sshd_config:
- 确认
PubkeyAuthentication yes已开启 - 检查
AuthorizedKeysFile路径是否正确,且用户公钥已添加至对应文件 - 查看服务器认证日志(通常在
/var/log/auth.log或/var/log/secure),是否存在invalid key、permission denied等记录
错误堆栈参考:
com.jcraft.jsch.JSchException: Auth cancel for methods 'publickey,gssapi-keyex,gssapi-with-mic,password' at com.jcraft.jsch.Session.connect(Session.java:519) at org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:147) ...
内容的提问来源于stack exchange,提问作者Sedat Göç
相关产品推荐
相关产品推荐

