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);
    }
}
Share:
26,450
Emil Rojewski
Author by

Emil Rojewski

Updated on December 24, 2021

Comments

  • Emil Rojewski
    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-----"