首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在云init中设置ssh键?

如何在云init中设置ssh键?
EN

Ask Ubuntu用户
提问于 2022-11-19 06:36:31
回答 2查看 4K关注 0票数 0

我正在使用云-init来使用UbuntuServer22.04.1设置一个Raspberry Pi。我想设置设备的SSH密钥,这样我就可以连接,而不容易受到中间人的攻击。

我目前的用户数据是:

代码语言:javascript
复制
#cloud-config
users:
- name: 'foo'
  groups: users,adm,dialout,audio,netdev,video,plugdev,cdrom,games,input,gpio,spi,i2c,render,sudo
  shell: /bin/bash
  lock_passwd: true
  ssh_authorized_keys:
    - 'ssh-ed25519 ...'
  ssh_keys:
    ed25519_private: |
      -----BEGIN OPENSSH PRIVATE KEY-----
      ...
      -----END OPENSSH PRIVATE KEY-----
    ed25519_public: ...

当我进入设备ssh时,它的ECDSA指纹每次都会发生变化。(也就是说,如果我重新图像驱动器,让云init再次运行,然后去SSH进去,指纹是不同的。它从来不匹配用户数据中ed25519_private/public中的密钥的指纹。)所以我认为它在引导时产生了新的键,而我不知道如何阻止它。

如何设置设备的SSH密钥?

更新(per @muru):

云init 文档的主机关键部分包括几个相关条目:

  • 理论上,如果您指定了ssh_keys,那么就不会生成新的键。我不知道我做错了什么不是这样的。
  • 我尝试过将ssh_deletekeys: false置于ssh_keys (用户对象)之下,并在全局级别上。SSH‘’ing每次都会产生新的密钥指纹。
  • 我尝试过将ssh_genkeytypes: []置于ssh_keys (用户对象)之下,并在全局级别上。有时(我没有记录)这会导致我根本不能使用ssh,大概是因为没有键。在任何情况下,我都没有看到正确的密钥指纹(从ed25519_private派生)。
  • 有些条目允许我将公钥导入到我的授权密钥、发布密钥、取消keygen输出或启用/禁用根登录。我对这些东西都不感兴趣。
  • ssh_keys是唯一声称允许我设置主机私钥的部分。
  • 本节中没有其他条目允许我控制是否生成密钥,或者指定要使用的私有主机键。也许我误读了什么?

最后,我刚刚做了一个ssh-keyscan <host> | ssh-keygen -lf -,很明显,我的设备除了生成一个ed25519密钥之外,还生成了一个ECDSA密钥:

代码语言:javascript
复制
$ ssh-keyscan <host> | ssh-keygen -lf -
# <host>:22 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3
# <host>:22 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3
# <host>:22 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3
256 SHA256:T50YAWwIgIOsQNuIXGBpoz1xPFXJkzffafibruuABtQ <host> (ECDSA)
256 SHA256:DB00DS6xzx5v7ZdVBe+z4nLZhOGVrKuSdhwdenhAm4s <host> (ED25519)

(两个签名都不匹配ed25519_private的签名)

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2022-11-20 19:16:57

最终的答案有三部分:

  1. ssh_keys:需要在顶层,而不是在用户下面。
  2. ssh_deletekeys: false需要在顶层,而不是在ssh_keys:之下。
  3. YAML多行字符串语法非常精细。我仍然不知道我到底做错了什么,但我转而使用双引号语法和尾随的\n,它开始工作。

最终的用户数据定义如下:

代码语言:javascript
复制
#cloud-config
users:
- name: 'foo'
  groups: users,adm,dialout,audio,netdev,video,plugdev,cdrom,games,input,gpio,spi,i2c,render,sudo
  shell: /bin/bash
  lock_passwd: true
  ssh_authorized_keys:
    - 'ssh-ed25519 ...'

ssh_keys:
  ed25519_private: "-----BEGIN OPENSSH PRIVATE KEY-----\n...\n-----END OPENSSH PRIVATE KEY-----\n"
  ed25519_public: ...

ssh_deletekeys: false
票数 2
EN

Ask Ubuntu用户

发布于 2022-11-19 15:04:25

我假设您指的是这个场景中的主机密钥。

若要修复被覆盖的主机键,请设置

代码语言:javascript
复制
ssh_deletekeys: false

默认情况下,每次检测到云init在新实例上运行时,它都会覆盖现有的主机键。这是出于安全目的的默认行为。在云环境中,常见的用例是从现有实例中创建新的映像。在该场景中,启动新实例但将现有主机键与前一个实例保持在一起将是一个安全漏洞。

对于像Raspberry这样的物理设备,这个用例不应该相关,所以您可以将ssh_deletekeys设置为false

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1441490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档