
Я хочу автоматически настроить свои ключи SSH на свежей установке Ubuntu Server 20.04 на Raspberry Pi 4 — в основном в качестве учебного упражнения. Я пытаюсь использовать ssh_import_id
опциюоблако-initчтобы извлечь мой открытый ключ SSH из моей учетной записи GitHub и добавить его ~/.ssh/authorized_keys
для pi
пользователя.
Похоже, я не могу заставить ssh_import_id
конфигурацию сработать. Каталог ~/.ssh
никогда не создается для pi
пользователя, и нет никаких журналов, относящихся к извлечению ключа из GitHub/ssh_import_id в /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
, что, кажется, работает нормально, поскольку переделывает пользователей/общие биты/ключи root 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
Согласно документации ssh_import_id
модуля cloud-init, он доступен только для Ubuntu и Debian, однако в зависимости от разновидности и версии Ubuntu/Debian двоичный файл, ssh-import-id
который модуль cloud-init ssh_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
.