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

JSch使用私钥进行SSH认证失败(Auth fail错误)求助

JSch使用私钥进行SSH认证失败(Auth fail错误)求助

兄弟,看你遇到JSch用私钥SSH认证失败的问题了,结合你贴的日志片段,我整理了几个大概率能解决问题的排查方向,你可以一个个试试:

先把你提供的日志贴出来方便大家分析:

JSch Log [level 1]: Connecting to 10.***.150 port 22 
JSch Log [level 1]: Connection established 
JSch Log [level 1]: Remote version string: SSH-2.0-OpenSSH_8.7 
JSch Log [level 1]: Local version string: SSH-2.0-JSCH-0.1.54 
JSch Log [level 1]: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256 
JSch Log [level 1]: CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521 
JSch Log [level...
  • JSch版本太老,兼容性拉胯
    你日志里的JSch版本是0.1.54,这版本都快成古董了!而远端是OpenSSH 8.7,新版本OpenSSH默认禁用了好多老算法,比如你日志里JSch支持的diffie-hellman-group14-sha1,在新OpenSSH里早就被踢到黑名单了。赶紧升级JSch到最新稳定版(比如0.1.55及以后),新版本适配了现代SSH的加密标准,这应该是最容易解决问题的办法。

  • 私钥相关的格式&权限要盯紧

    • 先看私钥格式:如果你的私钥是新的OpenSSH格式(开头是-----BEGIN OPENSSH PRIVATE KEY-----),老JSch根本不认,得转换成传统PEM格式,用命令ssh-keygen -p -m PEM -f /path/to/your/private_key就能转。
    • 再看权限:Linux/macOS下私钥文件权限必须是600(chmod 600 你的私钥路径),权限太松SSH直接拒你没商量;服务器端的~/.ssh/authorized_keys文件也要设成600,所在的.ssh目录设成700,权限不对认证必败。
    • 最后确认:服务器的authorized_keys里确实加了对应私钥的公钥,别搞混了其他私钥的公钥!
  • 手动指定兼容的密钥交换算法
    如果暂时不想升级JSch,那试试在代码里手动指定JSch和服务器都支持的Kex算法,比如:

    JSch jsch = new JSch();
    Properties config = new Properties();
    // 选几个老JSch和OpenSSH8.7都支持的算法
    config.put("kex", "diffie-hellman-group14-sha256,ecdh-sha2-nistp256");
    Session session = jsch.getSession("你的用户名", "服务器地址", 22);
    session.setConfig(config);
    

    同时要确保服务器的sshd_config里启用了这些算法,比如加一行KexAlgorithms +diffie-hellman-group14-sha256,然后重启sshd服务。

  • 别忘了私钥的密码保护
    如果你的私钥设了密码(passphrase),那代码里必须处理密码输入啊!比如实现JSch的UserInfo接口来提供密码,不然JSch解不开私钥,自然认证失败。

备注:内容来源于stack exchange,提问作者Lojini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:28:13