我注意到Karaf在每次启动时都会生成新的SSH密钥。它使通过ssh连接的自动脚本无效,因为每次都必须手动接受新密钥。
是否可以在每次新安装时停止该行为并仅生成一次新密钥?
更多调试信息:我注意到了,' etc / host.key'没有改变。但是,在停止并启动karaf之后,我收到了消息:
ssh -p 8101 localhost -oHostKeyAlgorithms = + ssh-dss
etc/org.apache.karaf.shell.cfg
生成DSA密钥的事实也与来自karaf.log的日志消息不匹配:
INFO | sshd-SshServer [20056f77] -nio2-thread-2 | SimpleGeneratorHostKeyProvider | 48 - org.apache.sshd.core - 1.2.0 | generateKeyPair(RSA)生成主机密钥 - size = 4096
我的sshPort=8101
sshHost=0.0.0.0
sshRealm=karaf
hostKey=${karaf.etc}/host.key
algorithm=RSA
keySize=4096
:
foreach ( $tabdocids as $ordered_id ) {
foreach ( $datas as $doc )
if ($doc->docid == $ordered_id)
$ordered [] = $doc;
}
$datas=$ordered;
在挖掘了我发现的日志后,该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 Serialization读取/写入host.key,这可能会导致OSGi出现问题(更糟糕的是,重新部署功能可能会导致文件失效)。
答案 0 :(得分:0)
当您第一次使用ssh连接时,Karaf会创建服务器密钥。然后将密钥放在karaf home etc / host.key中。因此,只应为每个karaf服务器创建一次密钥。
您也可以在那里提供自己的密钥,以避免创建的开销。
密钥由org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider生成。创建密钥时,您应该在日志中看到此消息:
generateKeyPair(RSA) generating host key - size=4096
答案 1 :(得分:0)
我决定回答我自己的问题,因为我找到了一个不需要讨论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进行了测试