我的 MaaS 系统可以运行,可以征募、招募、委任、签发逮捕令、进行军事法庭审判、部署和销毁。juju 似乎运行良好:在本地引导,安装 juju-gui,我的魅力得到部署,单位按照我预期的那样被分配到服务,我的关系被注意到并且钩子运行,并且一切都在 juju-gui 中显示良好。
我使用的 charms 是匹配的控制器 (1) 和从属 (多个) 集。控制器应在自身和每个从属之间进行 rsync。所发生的是,从属拒绝尝试,抱怨它们无法打开 sseh_host_ed25519_key 文件。(tail -f /var/log/auth.log)(我正在运行脚本,而不是 charm,我以 ubuntu 的身份 rsh 到控制器,并从那里运行它)
我读到答案相当简单,在每台机器上执行 ssh-keygen -a。首先,我在控制器上运行它,然后在从属上运行它。我尝试 rsync,auth.log 显示连接由 [preauth] 关闭。我尝试 ssh_copy-id,但它显示“权限被拒绝。(公钥)”,auth.log 中的条目相同。
所以,我的问题是:我应该把 ssh-keygen 放在哪里才能让它工作?我在分发密钥时遗漏了什么?
答案1
MAAS 将通过添加 Juju 告诉它的密钥(并且该密钥只是您的公钥)来确保您可以访问每个节点。根据设计,单元本身不具有 SSH 访问权限(请考虑安全隐患!)。
如果您希望所有单元或服务都能相互访问,则需要让每台机器为您想要交互的用户生成一个 SSH 密钥,然后通过关系将他们的公共 ssh 密钥发送给对方。因此,如果这是主 -> 从设置,您可以这样做:
master-charm/metadata.yaml
name: master-charm
provides:
master:
interface: my-charm-interface
从属魅力/元数据
name: slave-charm
requires:
master:
interface: my-charm-interface
然后在每个 charm 中你需要做如下操作:
(主|从)-charm/hooks/主关系加入
#!/bin/bash
if [ ! -f ~user-you-want-access/.ssh/id_rsa ]; then
ssh-keygen -t rsa -N "" -f ~user-you-want-access/.ssh/id_rsa
chown -R user-you-want-access.user-you-want-access ~user-you-want-access/.ssh
fi
relation-set public-key="$(cat ~user-you-want-access/.ssh/id_rsa.pub)"
(主|从)-魅力/钩子/主关系改变
#!/bin/bash
key="$(relation-get public-key)"
if [ ! -z "$key" ] && ! grep -q "$key" ~user-you-want-access/.ssh/authorized_keys; then
echo "$key" >> ~user-you-want-access/.ssh/authorized_keys
chown -R user-you-want-access.user-you-want-access ~user-you-want-access/.ssh
fi
这些只是为了说明如何对此类事物进行建模。您可以使用对等关系对节点之间的访问进行同样的操作。
答案2
在回答你的一般性问题时,cloud-init 包负责在云镜像首次启动时生成主机密钥。
就您更具体的情况而言,我认为它目前不会生成 ed25519 密钥,但据了解,这不会给任何用户带来任何问题。如果它确实给您带来了问题,您应该在错误 1382118。为什么你特别需要 ed25519?