2014-06-05 257 views
2

尝试使用ssh密钥身份验证连接到主机。以下是我的代码:com.jcraft.jsch.JSchException:身份验证失败错误

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();声明。我正在使用私钥和密码进行连接。

回答

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

这是一个PuTTY格式的密钥文件吗?也就是说,它是从puttygen生成的,PuTTY密钥生成工具? Jsch只读取OpenSSH格式的密钥文件,而不读取PuTTY格式的文件。

如果您想使用该密钥,您可以使用puttygen将密钥转换为OpenSSH格式。请参阅this question.

+0

这是一个PuTTY格式的密钥文件,使用puttygen生成。 – Kriz

0

获取最新版本的JSch。旧版本显示无故验证失败