![如何在 Raspberry Pi 4 /w Ubuntu 20.04 Server 上将 ssh_import_id 与 cloud-init 结合使用?](https://linux22.com/image/1071036/%E5%A6%82%E4%BD%95%E5%9C%A8%20Raspberry%20Pi%204%20%2Fw%20Ubuntu%2020.04%20Server%20%E4%B8%8A%E5%B0%86%20ssh_import_id%20%E4%B8%8E%20cloud-init%20%E7%BB%93%E5%90%88%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
我希望在 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-config
和users:
。类似这样的代码应该可以工作:
#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-id
cloud-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