Как использовать ssh_import_id с cloud-init на Raspberry Pi 4 /w Ubuntu 20.04 Server?

Как использовать ssh_import_id с cloud-init на Raspberry Pi 4 /w Ubuntu 20.04 Server?

Я хочу автоматически настроить свои ключи 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.

Связанный контент