爪哇|特立独行的 SSH |未能协商传输组件 | sha1 md5 |沙2-512沙2-256

问题描述

客户通过 Putty 使用 SFTP 命令发送的密钥工作正常。通过 Winscp 工作正常。

但是当我尝试使用 Java 代码时,我得到以下信息:

Caused by: com.maverick.ssh.SshException: 
Failed to negotiate a transport component 
  [hmac-sha1,hmac-md5]     [hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-256] 
  [UnkNown cause]

代码

else if (authMethod == AUTH_KEY) {
PublicKeyAuthentication pk = new PublicKeyAuthentication();
SshPrivateKeyFile pkfile = SshPrivateKeyFileFactory.parse(new FileInputStream(pass));

com.maverick.ssh.components.SshKeyPair pair;
if (pkfile.isPassphraseProtected())
   pair = pkfile.toKeyPair(keypass);
else
   pair = pkfile.toKeyPair(null);

pk.setPrivateKey(pair.getPrivateKey());
pk.setPublicKey(pair.getPublicKey());
this.session.authenticate(pk);

上述通用代码适用于现有密钥,不适用于这个新服务器。没有找到代码级别的具体解决方案。

代码或任何类型的转换中还有什么要添加的吗?

解决方法

问题是你方只提供 HMAC-MD5 和 HMAC-SHA-1 作为 MAC 算法,而服务器端只支持 HMAC-SHA-256 和 HMAC-SHA-512。服务器在这里做正确的事情,因为 MD5 和 SHA-1 被认为是不安全的,即使它们的 HMAC 版本在 SSH 中使用时不是不安全的,责任方已经放弃使用 MD5 和 SHA-1。

因为您和服务器无法就使用的算法达成一致,连接无法继续。

看起来 the latest version of the Maverick SSH client 支持 hmac-sha2-256 (HMAC-SHA-256),因此您可以尝试升级,或者您可以使用更现代的 SSH 库。