当前位置: 首页 > 知识库问答 >
问题:

IllegalStateException:无法协商服务器主机密钥算法的密钥交换

易俊远
2023-03-14
java.lang.IllegalStateException: Unable to negotiate key exchange for server host key algorithms 
(client: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,ssh-rsa,ssh-dss / 
server: rsa-sha2-512,rsa-sha2-256)

引发错误的代码:

import org.apache.sshd.client.SshClient;
import org.apache.sshd.client.session.ClientSession;
import java.io.IOException;

public class Main{
    public static void main(String[] args) {
        SshClient client = SshClient.setUpDefaultClient();
        client.start();
        try {
                ClientSession session = client.connect("root", "172.17.0.2", 830).verify(10000).getSession();
                session.addPasswordIdentity("root");
                session.auth().verify(9999);
                // error 'Unable to negotiate key exchange for server host key algorithms' is thrown
        }
        catch (IOException e){
           e.printStackTrace();
        }
    }
}

共有1个答案

林丁雷
2023-03-14

我也没有解决我自己的问题,但我和你在同一个区域。但对我来说,查看SSHD日志,我想我看到客户机提供rsa_sha2_512,而(一个)服务器拒绝该请求并放弃连接请求。

这里有一个Scala小片段,对我来说没有任何改变。我认为这是你得到的,如果你不设置;(我找到的)每个默认工厂。

import org.apache.sshd.common.kex.{BuiltinDHFactories, KeyExchangeFactory}
 val kexList: util.List[KeyExchangeFactory] = {
        val kex = List(
          BuiltinDHFactories.dhg1,
          BuiltinDHFactories.dhg14,
          BuiltinDHFactories.dhgex,
          BuiltinDHFactories.dhg14_256,
          BuiltinDHFactories.dhg15_512,
          BuiltinDHFactories.dhg16_512,
          BuiltinDHFactories.dhg17_512,
          BuiltinDHFactories.dhg18_512,
          BuiltinDHFactories.dhgex256,
          BuiltinDHFactories.ecdhp256,
          BuiltinDHFactories.ecdhp384,
          BuiltinDHFactories.ecdhp521)
        val dh2kex = kex.map(k => ClientBuilder.DH2KEX(k))
        dh2kex.asJava
      }
      session.setKeyExchangeFactories(kexList)

或者在Java中是这样的:

    List<KeyExchangeFactory> kexList = 
BuiltinDHFactories.VALUES.stream().map(ClientBuilder.DH2KEX).collect(Collectors.toList());
 类似资料:
  • 问题内容: 我尝试从KeyStore获取密钥。我通过Keytool创建了一个密钥库: keytool -genkeypair -dname“ cn = Mark Jones,ou = JavaSoft,o = Sun,c = US” -alias business2 -keypass abcdtest -keystore C:\ workspace \ XMLSample \ keystore \

  • 在那之后,我试着拿回我的子键,以防它们还在身边。我可以看到我的钥匙和子钥匙在GPG钥匙串OSX应用程序。使用和进行列表时,我获得了与主密钥和子密钥相关联的所有公钥,但只获得了主密钥和其中一个子密钥的秘密(我没有导出到yubikey的那个)。 尝试调试更多,我决定使用一个较新版本的gpg来合并密钥等等,希望我能拿回秘密(我想在这一点上它已经不可能了,但我一直在尝试) 使用,它告诉我有一个主密钥和两个

  • 问题内容: 我具有对生产服务器的超级用户访问权限,我想在git中将最新版本部署到服务器,但是当我在要更新的文件夹上“ git pull”时遇到以下错误。 我浏览了一下,但是找不到明确的答案。 登台服务器在同一台计算机上运行,​​但是只是在不同的文件夹中,当我在该文件夹中时,一切正常。 我对Linux不太有经验,所以请提供有关如何修复的明确答案:-) 否则我可以使用任何我需要的东西 ps这在过去一直

  • 在Firebase仪表板中查看我的服务器密钥时,服务器密钥被切断,我不确定如何查看整个字符串: 传统服务器密钥有一个复制按钮,我可以使用,但新的服务器密钥没有。 如何复制或查看我的完整新服务器密钥?

  • 我试图为某些设备生成密钥时出错。我能够在运行4.4.2的三星Galaxy Note上重现错误。 我创建了一个小应用程序,只能通过从Android开发者页面“生成新私钥”下的https://developer.android.com/training/articles/keystore.html逐行复制代码来生成密钥 错误似乎发生在kpg.generateKeyPair(),在Android Key

  • 我正在使用尝试为正在运行的创建一个新的,方法是单击密码重置,然后输入带有发布ssh的新用户名。 描述说 提供新用户名将创建一个具有sudo权限的新用户帐户。提供现有用户名将重置该用户帐户的访问凭据。 每次我点击它都会显示错误 无法重置虚拟机的密码/ssh密钥。 没有理由。