如何在 Raspberry Pi 4 /w Ubuntu 20.04 Server 上将 ssh_import_id 与 cloud-init 结合使用?

如何在 Raspberry Pi 4 /w Ubuntu 20.04 Server 上将 ssh_import_id 与 cloud-init 结合使用?

我希望在 Raspberry Pi 4 上全新安装的 Ubuntu Server 20.04 上自动设置我的 SSH 密钥 - 主要是为了学习练习。我尝试使用ssh_import_id以下选项云初始化从我的 GitHub 帐户中提取我的 SSH 公钥并将其添加到~/.ssh/authorized_keys用户pi

我似乎无法让ssh_import_id配置生效。该~/.ssh目录从未为用户创建,并且没有与从 GitHub/ssh_import_id或pi中提取密钥相关的任何日志。/var/logs/cloud-init.log/var/log/cloud-init-output.log

user-data我的SD 卡根目录中的当前内容:

  - name: pi
    groups: [sudo]
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_import_id: # import public key from github
      - gh:my_cool_github_account
    lock_passwd: true # disable password login

如果我使用手动输入公钥ssh_authorized_keys,一切都会正常工作,这将适合我的工作流程,但我希望能获得 GitHub 的设置,因为它很时髦。

我对 的理解cloud-init肯定是有点基础的,所以我可能错过了一些东西。我通过运行cloud-init clean然后来触发更改cloud-init init,感觉它运行良好,因为它正在重建用户/常规位/根 ssh 密钥和指纹。

我大概也正在使用NoCloud数据源。

有人能帮我找出我做错什么了吗?

答案1

这仅仅是用户数据的片段吗?如果不是,您还需要标题#cloud-configusers:。类似这样的代码应该可以工作:

#cloud-config
users:
  - name: pi
    groups: [sudo]
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_import_id:
      - gh:torvalds
    lock_passwd: true

我刚刚测试并在中找到了密钥/home/pi/.ssh/authorized_keys。您确定您尝试导入的 github 用户的密钥位于 吗https://github.com/settings/keys

/var/log/cloud-init.log包含:

2021-08-09 13:56:24,302 - helpers.py[DEBUG]: Running config-ssh-import-id using lock (<FileLock using file '/var/lib/cloud/instances/me/sem/config_ssh_import_id'>)
2021-08-09 13:56:24,302 - cc_ssh_import_id.py[DEBUG]: Importing SSH ids for user pi.
2021-08-09 13:56:24,302 - subp.py[DEBUG]: Running command ['sudo', '-Hu', 'pi', 'ssh-import-id', 'gh:torvalds'] with allowed return codes [0] (shell=False, capture=False)

答案2

根据 cloud-init 的文档,ssh_import_id模块仅适用于 Ubuntu 和 Debian,但是根据 Ubuntu/Debian 的风格和版本,ssh-import-idcloud-initssh_import_id模块在后台用于实际检索密钥的二进制文件可能会或可能不会安装在您的发行版上。

例如,https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.qcow2没有附带,因此 cloud-init 无法从 Github 导入我的密钥。就我而言,我看到了command not found中的明显错误/var/log/cloud-init-output.log

检查ssh-import-id命令是否存在于您初始化的系统中。如果不存在,那么您可能需要尝试将此块添加到您的user-data

packages:
  - ssh-import-id

答案3

尝试:

users:
  - name: pi
    ssh_authorized_keys:
      - ssh-rsa <your key here>

这应该把你的密钥放在用户.ssh/authorized_keys的文件中pi

相关内容