Java ssh connect with key using JSch - Auth Failed
26,450
Solution 1
Thank you @Vladi. In my case I needed to connect to a server that used both private key and a password. Hence I had to set the Config like this
session.setConfig("PreferredAuthentications", "publickey,password");
session.setPassword("some_password");
Solution 2
This how I connected localy using with Path of private Key
when
privateKeyPath ="C:\Keys\private_key.ppk"
public static OutputStream ConnectionUsingKey(String user, String hostName, String privateKeyPath)
throws JSchException, IOException {
JSch jsch = new JSch();
Session session = null;
try {
jsch.addIdentity(privateKeyPath);
session = jsch.getSession(user, hostName, 22);
session.setConfig("PreferredAuthentications", "publickey");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
if (session.isConnected() == true) {
System.out.println("Connection to Session server is successfully");
}
channel = session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect(30 * 1000);
return channel.getOutputStream();
} catch (JSchException e) {
throw new RuntimeException("Failed to create Jsch Session object.", e);
}
}
Author by
Emil Rojewski
Updated on December 24, 2021Comments
-
Emil Rojewski over 2 years
I'm trying to connect to localhost using ssh with key but i still get the "Auth Failed" error.
Here is the method implementation:
public void downloadUsingPublicKey(String username, String host) { String privateKey = "~/.ssh/id_rsa"; JSch jsch = new JSch(); Session session = null; Channel channel = null; ChannelSftp channelSftp = null; try { jsch.addIdentity(privateKey); System.out.println("Private Key Added."); session = jsch.getSession(username, host); System.out.println("session created."); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); channel = session.openChannel("sftp"); channel.connect(); System.out.println("shell channel connected...."); channelSftp = (ChannelSftp)channel; channelSftp.cd(Config.dir); System.out.println("Changed the directory..."); } catch (JSchException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SftpException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { if(channelSftp!=null) { channelSftp.disconnect(); channelSftp.exit(); } if(channel!=null) channel.disconnect(); if(session!=null) session.disconnect(); } }
I've created my public/private key pair using linux terminal, as follows:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
I didn't put any phrase. Next step:
ssh-add ~/.ssh/id_rsa
And finally
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Then when i run my program i get error:
com.jcraft.jsch.JSchException: Auth fail at com.jcraft.jsch.Session.connect(Session.java:512) at com.jcraft.jsch.Session.connect(Session.java:183) at pl.eroj.filedownloader.Downloader.downloadUsingPublicKey(Downloader.java:73) at pl.eroj.filedownloader.Downloader.main(Downloader.java:107)
Any ideas? My key is of OpenSSH type starting with line "-----BEGIN RSA PRIVATE KEY-----"