尝试使用ssh key auth连接到主机。以下是我的代码:
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();
语句中。我正在使用私钥和密码进行连接。
答案 0 :(得分:3)
String privateKey = "~/.ssh/WF_OPENSSH.ppk";
这是一个PuTTY格式的密钥文件吗?即,它是从PuTTY密钥生成实用程序puttygen
生成的吗? Jsch只读取OpenSSH格式的密钥文件,而不是PuTTY格式的文件。
如果要使用该密钥,可以使用puttygen
将密钥转换为OpenSSH格式。见this question.
答案 1 :(得分:0)
获取最新版本的JSch。旧版本无故显示Auth Fail