我正在使用下面的代码连接远程服务器,并按照以下步骤连接私钥/公钥生成并将公钥与授权密钥连接起来。
代码:
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;
}
脚步:
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"
我仍然遇到异常“com.jcraft.jsch.JSchException:Auth fail”。请指导我继续。
答案1
我认为发生这种情况的原因如下:
私钥受密码保护,但您已验证事实并非如此。
包含密钥的目录已加密。
.ssh 目录和/或公钥/私钥上的文件权限太开放。它们应该是:
- ssh 目录:700
- 公钥:644
- 私钥:600(甚至可能是400)
也可能是授权密钥文件中的公钥格式不兼容。您可能需要将其转换为其他格式。假设 OpenSSH:
- 转换为 SSH2:
ssh-keygen -i -f /path/to/private/key ssh-keygen -i -f /path/to/public/key
- 从 SSH2 转换:
ssh-keygen -e -f /path/to/private/key ssh-keygen -e -f /path/to/public/key
- 转换为 SSH2:
答案2
JSch 不支持 rsa-sha2。而且 JSch 似乎不再更新,很可能永远不会更新。试试这个ssh-keygen -m PEM -t rsa -b 2048是工作。