I'm using below code to connect remote server and I followed below steps to connect private/public key generation & concatenate of public key with authorized key.
Code:
private Session createSession() throws JSchException {
JSch jsch = new JSch();
jsch.addIdentity(privateKey); //add private key path as ~/.ssh/id_rsa
Session session;
session = jsch.getSession(user, host, port);
java.util.Properties config = new java.util.Properties();
Properties cfg = new Properties();
cfg.put("trust", "true");
cfg.put("StrictHostKeyChecking", "no");
cfg.put("HashKnownHosts", "yes");
session.setConfig(cfg);
session.connect();
return session;
}
Steps:
1. I can able to generate private/public key in the path ~/.ssh/id_rsa(private key) and ~/.ssh/id_rsa.pub(public key)
>> ssh-keygen (or) ssh-keygen -t rsa -b 4096
Note: Generated key with no passphrase
2. I have added public key with authorized_keys with below command
>> ssh user@host "echo \"`cat ~/.ssh/id_rsa.pub`\" >> .ssh/authorized_keys"
Still I'm facing the exception "com.jcraft.jsch.JSchException: Auth fail". Please guide me to proceed.
Best Answer
I believe this can happen for several reasons:
The private key is password protected, which you have already verified is not the case.
The directory containing the keys is encrypted.
The file permissions on the .ssh directory and or public/private keys are too open. They should be:
What also might be going on is the format of the public key within the authorized keys file is incompatible. You might need to convert it to a different format. Assuming OpenSSH:
ssh-keygen -i -f /path/to/private/key ssh-keygen -i -f /path/to/public/key
ssh-keygen -e -f /path/to/private/key ssh-keygen -e -f /path/to/public/key