停止Karaf在启动时生成新的SSH密钥

停止Karaf在启动时生成新的SSH密钥,ssh,apache-karaf,Ssh,Apache Karaf,我注意到Karaf在每次启动时都会不断生成新的SSH密钥。它使通过ssh连接的自动脚本变得无用,因为每次都必须手动接受新密钥 是否可以停止这种行为,并在每次新安装时仅生成一次新密钥 更多调试信息:我注意到,'etc/host.key'没有改变。但是,在停止和启动karaf后,我得到了以下信息: ssh-p8101localhost-oHostKeyAlgorithms=+ssh-dss 生成DSA密钥的事实与karaf.log中的日志消息也不匹配: 信息| sshd SshServer[2005

我注意到Karaf在每次启动时都会不断生成新的SSH密钥。它使通过ssh连接的自动脚本变得无用,因为每次都必须手动接受新密钥

是否可以停止这种行为,并在每次新安装时仅生成一次新密钥

更多调试信息:我注意到,'etc/host.key'没有改变。但是,在停止和启动karaf后,我得到了以下信息:

ssh-p8101localhost-oHostKeyAlgorithms=+ssh-dss

生成DSA密钥的事实与karaf.log中的日志消息也不匹配:

信息| sshd SshServer[20056f77]-nio2-thread-2| SimpleGeneratorHostKeyProvider | 48-org.apache.sshd.core-1.2.0| generateKeyPair(RSA)生成主机密钥-大小=4096

My
etc/org.apache.karaf.shell.cfg

sshPort=8101
sshHost=0.0.0.0
sshRealm=karaf
hostKey=${karaf.etc}/host.key
algorithm=RSA
keySize=4096
在查看日志后,我发现host.key文件没有正确加载:

2017-03-29T13:44:58977 |警告| sshd SshServer[18c17f90]-nio2-thread-1| SimpleGeneratorHostKeyProvider | 48-org.apache.sshd.core-1.2.0| resolveKeyPair(~/karaf docker/apache-karaf-4.1.0/etc/host.key)失败 要加载的(InvalidKeySpecException):缺少类: org.bouncycastle.jcajce.provider.asymetric.rsa.BCRSAPrivateCrtKey 2017-03-29T13:45:00340 |错误| sshd SshServer[18c17f90]-nio2-thread-1| SimpleGeneratorHostKeyProvider | 48-org.apache.sshd.core-1.2.0| 覆盖密钥(~/karaf docker/apache-karaf-4.1.0/etc/host.key)为 禁用:使用一次性ssh dss: SHA256:3yWwxdzoymMvEBYIWMIguQ8G3J7kfapd+avCMoue2R4 2017-03-29T13:45:00342 |警告| sshd SshServer[18c17f90]-nio2-thread-1 | ServerSessionImpl


Apache SSHD使用Java序列化读取/写入host.key,这可能会导致OSGi出现问题(更糟糕的是,重新部署功能可能会使文件变得无用)。

Karaf在您首次使用ssh连接时创建服务器密钥。然后,它会将钥匙放入karaf home etc/host.key中。因此,每个karaf服务器只应创建一次密钥

您还可以在那里提供自己的密钥,以避免创建的开销

密钥由org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider生成。创建密钥时,您应该在日志中看到以下消息:

generateKeyPair(RSA) generating host key - size=4096

我决定回答我自己的问题,因为我找到了一个解决方案,它不需要涉及到关于karaf实现等的讨论

问题的原因是因为Karaf模块
org.apache.Karaf.shell.ssh
无法持久化,或者无法从
host.key
读取生成的密钥,我想它只针对以下场景进行了测试:

  • 通过添加行使用PEM格式的键

    hostKeyFormat=PEM

    文件
    etc/org.apache.karaf.shell.cfg

  • 使用
    openssl
    工具生成密钥: openssl genrsa-out etc/host.key 4096


  • 启动后,Karaf将使用openssl生成的密钥,而不是尝试生成自己的密钥。根据karaf 4.1.x进行测试

    每次安装只能创建一次密钥。你有什么特殊的环境吗?@ChristianSchneider我在Ubuntu x86_64上使用4.1.0版,使用Oracle Java 1.8你能试着用ssh-p 8101连接吗karaf@localhost? .. 奇怪的是,我刚刚尝试使用您的命令,但仍然正确创建了我的密钥。@ChristianSchneider没有-o参数,我得到错误:“无法与::1端口8101协商:找不到匹配的主机密钥类型。他们的报价:ssh dss”我没有给出用户名,因为使用了etc/keys.properties中的密钥,但是karaf@localhost给我同样的错误消息。听起来你的ssh客户端不接受RSA。能否尝试将shell.cfg算法从RSA更改为DSA?因此不应覆盖此密钥?如果是,系统的哪个部分对此负责?是否有我应该查找的特定日志消息?是的。密钥只能创建一次。在答案中添加了更多信息。我已编辑了我的问题。看起来host.key被忽略了,其他东西正在启动时生成SSH密钥……缺少类:org.bouncycastle.jcajce.provider.asymetric.rsa.bcrsaprovatecrtkey谁负责提供该类:JRE环境、Karaf或特定Karaf功能?您从哪里得到此错误?在我的系统中,karaf系统中不存在此包。
    generateKeyPair(RSA) generating host key - size=4096