com.jcraft.jsch.JSchException: Auth fail error



尝试使用ssh密钥认证连接到主机。下面是我的代码:

package com.mkyong.common;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
/**
 * 
 */
public class UserAuthPubKey {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
      try {
            JSch jsch = new JSch();
            String user = "XXXXXXXX";
            String host = "XXXXXXXX.XXXXXXX.com";
            int port = 22;
            String privateKey = "~/.ssh/WF_OPENSSH.ppk";
            String passphrase = "XXXXXXXXXXX";
            jsch.addIdentity(privateKey,passphrase);
            System.out.println("identity added ");
            Session session = jsch.getSession(user, host, port);
            System.out.println("session created.");
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();
            System.out.println("session connected.....");
            Channel channel = session.openChannel("sftp");
            channel.setInputStream(System.in);
            channel.setOutputStream(System.out);
            channel.connect();
            System.out.println("shell channel connected....");
            ChannelSftp c = (ChannelSftp) channel;
//            String fileName = "test.txt";
//            c.put(fileName, "./in/");
//            c.exit();
//            System.out.println("done");
        } catch (Exception e) {
            System.err.println(e);
        }
    }
}

我应该在这里做什么改变?在调试时,错误似乎发生在session.connect();语句。我正在使用私钥和密码短语连接。

String privateKey = "~/.ssh/WF_OPENSSH.ppk";

是一个putty格式的密钥文件吗?它是从PuTTY密钥生成工具puttygen生成的吗?Jsch只能读取openssh格式的密钥文件,不能读取putty格式的文件。

如果您想使用该密钥,可以使用puttygen将密钥转换为OpenSSH格式。

获取最新版本的JSch。旧版本显示Auth Fail for no reason

最新更新