userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms
1. 在本机 生成公钥私钥
ssh-keygen -m PEM -t rsa -b 4096
2.将公钥发送到远程服务器
1)linux:
ssh-copy-id -i /home/tenant/.ssh/id_rsa.pub 远程服务器用户名@远程IP地址
2)windows:C:/Users/Lenovo/.ssh/id_rsa
ssh-copy-id -i C:/Users/Lenovo/.ssh/id_rsa.pub 远程服务器用户名@远程IP地址
3.检查远程服务器的sshd_config 是否支持rsa
/etc/ssh/sshd_config 配置,追加上PubkeyAcceptedAlgorithms=+ssh-rsa
4.代码测试
Logger logger = new Logger() {
@Override
public boolean isEnabled(int level) {
// 这里可以根据需要判断是否记录某个级别的日志
return true; // 记录所有级别的日志
}
@Override
public void log(int level, String message) {
// 将日志信息输出到控制台(你也可以输出到文件等其他地方)
System.out.println("JSch Log: " + message);
}
};
JSch.setLogger(logger);
JSch jsch = new JSch();
// jsch.addIdentity("C:\\Users\\Lenovo\\.ssh\\id_rsa","aaaaaa");
byte[] privateKeyBytes = Files.readAllBytes(Paths.get("C:/Users/Lenovo/.ssh/id_rsa"));
byte[] publicKeyBytes = Files.readAllBytes(Paths.get("C:/Users/Lenovo/.ssh/id_rsa.pub"));
byte[] passphraseBytes = "aaaaaa".getBytes();
jsch.addIdentity("id_rsa", privateKeyBytes, publicKeyBytes, passphraseBytes);
Session session = jsch.getSession("用户名", "IP地址", 22);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();