【问题标题】:Stop Karaf from generating new SSH keys on startup阻止 Karaf 在启动时生成新的 SSH 密钥
【发布时间】:2017-08-21 13:55:39
【问题描述】:

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

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

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

ssh -p 8101 localhost -oHostKeyAlgorithms=+ssh-dss

Offending DSA key in ~/.ssh/known_hosts:5
  remove with:
  ssh-keygen -f "~/.ssh/known_hosts" -R [localhost]:8101
DSA host key for [localhost]:8101 has changed and you have requested strict checking.
Host key verification failed.

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

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

我的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:58,977 |警告 | 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.asymmetric.rsa.BCRSAPrivateCrtKey 2017-03-29T13:45:00,340 |错误 | 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:00,342 |警告 | sshd-SshServer[18c17f90]-nio2-thread-1 | ServerSessionImpl

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

【问题讨论】:

  • 每次安装只能创建一次密钥。你有什么特殊的环境吗?
  • @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 吗?

标签: ssh apache-karaf


【解决方案1】:

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

您还可以在此处提供自己的密钥以避免创建开销。

密钥由 org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider 生成。当它创建一个密钥时,您应该在日志中看到这条消息:

generateKeyPair(RSA) generating host key - size=4096

【讨论】:

  • 所以这个键不应该被覆盖?如果是,系统的哪个部分对此负责?我应该寻找任何特定的日志消息吗?
  • 是的。密钥只能创建一次。在答案中添加了更多信息。
  • 我已经编辑了我的问题。似乎 host.key 被忽略了,其他东西在启动时生成了 SSH 密钥......
  • 缺少类:org.bouncycastle.jcajce.provider.asymmetric.rsa.BCRSAPrivateCrtKey 谁负责提供该类:JRE 环境、Karaf 或特定的 Karaf 功能?
  • 你从哪里得到这个错误?在我的系统中,这个包在 karaf 系统中不存在。
【解决方案2】:

我决定回答我自己的问题,因为我找到了一个不需要参与讨论 karaf 实现等的解决方案。

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

  1. 通过添加行来使用 PEM 格式的密钥

    hostKeyFormat=PEM

    提交etc/org.apache.karaf.shell.cfg

  2. 使用openssl 工具生成密钥:

    openssl genrsa -out etc/host.key 4096

启动后,Karaf 会使用 openssl 生成的密钥,而不是尝试自己生成。针对 karaf 4.1.x 测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2019-06-11
    • 2020-08-06
    • 2017-08-09
    • 1970-01-01
    • 2022-09-30
    • 2021-09-10
    相关资源
    最近更新 更多