使用 public 键的 sftp 不工作
sftp with public key is not working
使用 ssh-keygen 生成了 RSA public 密钥。
正在尝试通过 sftp 连接远程服务器:
JSch jsch = new JSch();
try {
String publicKey = "/home/testuser/.ssh/id_rsa.pub";
jsch.addIdentity(publicKey);
session = jsch.getSession(sftpUsername, sftpHostname, sftpPort);
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
} catch (JSchException e) {
logger.error("Unable to obtain session", e);
}
出现以下错误:
com.jcraft.jsch.JSchException: invalid privatekey: /home/testuser/.ssh/id_rsa.pub
at com.jcraft.jsch.IdentityFile.<init>(IdentityFile.java:261)
at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:135)
at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:130)
at com.jcraft.jsch.JSch.addIdentity(JSch.java:206)
at com.jcraft.jsch.JSch.addIdentity(JSch.java:192)
有什么建议吗?
你有:
jsch.addIdentity(publicKey);
JSch javadoc 说:
public void addIdentity(String prvkey)
throws JSchException;
Adds an identity to be used for public-key authentication. Before registering it into identityRepository, it will be deciphered with passphrase.
Parameters:
- prvkey - the file name of the private key file. This is also used as the identifying name of the key. The corresponding public key is assumed to be in a file with the same name with suffix .pub.
当 JSch 需要私钥时,您提供了 public 密钥。
如果你仔细想想,这是有道理的。 public 密钥没有什么秘密。 JSch 想要一个秘密,这样它就可以证明你是谁。
您的私钥可能在 ~/.ssh/id_rsa
中(没有 .pub
扩展名)。
您可能需要使用 addIdentity
的双参数版本,以便提供密码来解密私钥。
使用 ssh-keygen 生成了 RSA public 密钥。
正在尝试通过 sftp 连接远程服务器:
JSch jsch = new JSch();
try {
String publicKey = "/home/testuser/.ssh/id_rsa.pub";
jsch.addIdentity(publicKey);
session = jsch.getSession(sftpUsername, sftpHostname, sftpPort);
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
} catch (JSchException e) {
logger.error("Unable to obtain session", e);
}
出现以下错误:
com.jcraft.jsch.JSchException: invalid privatekey: /home/testuser/.ssh/id_rsa.pub
at com.jcraft.jsch.IdentityFile.<init>(IdentityFile.java:261)
at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:135)
at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:130)
at com.jcraft.jsch.JSch.addIdentity(JSch.java:206)
at com.jcraft.jsch.JSch.addIdentity(JSch.java:192)
有什么建议吗?
你有:
jsch.addIdentity(publicKey);
JSch javadoc 说:
public void addIdentity(String prvkey) throws JSchException;
Adds an identity to be used for public-key authentication. Before registering it into identityRepository, it will be deciphered with passphrase.
Parameters:
- prvkey - the file name of the private key file. This is also used as the identifying name of the key. The corresponding public key is assumed to be in a file with the same name with suffix .pub.
当 JSch 需要私钥时,您提供了 public 密钥。
如果你仔细想想,这是有道理的。 public 密钥没有什么秘密。 JSch 想要一个秘密,这样它就可以证明你是谁。
您的私钥可能在 ~/.ssh/id_rsa
中(没有 .pub
扩展名)。
您可能需要使用 addIdentity
的双参数版本,以便提供密码来解密私钥。