¿Cómo usar ssh_import_id con cloud-init en Raspberry Pi 4 /w Ubuntu 20.04 Server?

¿Cómo usar ssh_import_id con cloud-init en Raspberry Pi 4 /w Ubuntu 20.04 Server?

Estoy buscando configurar automáticamente mis claves SSH en una instalación nueva de Ubuntu Server 20.04 en una Raspberry Pi 4, principalmente como ejercicio de aprendizaje. Estoy intentando usar la ssh_import_idopción deinicio de nubepara extraer mi clave pública SSH de mi cuenta de GitHub y agregarla ~/.ssh/authorized_keyspara el piusuario.

Parece que no puedo hacer que la ssh_import_idconfiguración se active. El ~/.sshdirectorio nunca está creado para el piusuario y no hay registros relacionados con nada que tenga que ver con extraer una clave de GitHub/ssh_import_id en /var/logs/cloud-init.logo /var/log/cloud-init-output.log.

El contenido actual de my user-dataen la raíz de la tarjeta 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

Todo funciona bien si ingreso la clave pública manualmente usando ssh_authorized_keys, lo que se adaptará a mi flujo de trabajo, pero espero configurar GitHub, ya que es elegante.

Mi comprensión de cloud-inites definitivamente un poco básica, por lo que es posible que me haya perdido algo. Estoy activando cambios ejecutando cloud-init cleany luego cloud-init init, lo que parece que está funcionando bien ya que está rehaciendo usuarios/bits generales/las claves ssh raíz y la huella digital.

Presumiblemente también estoy usando la NoCloudfuente de datos.

¿Alguien puede ayudarme a descubrir qué estoy haciendo mal?

Respuesta1

¿Es sólo un fragmento de sus datos de usuario? Si no, también necesitarás el #cloud-configencabezado y users:. Algo como esto debería funcionar:

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

Acabo de probar y encontré la clave /home/pi/.ssh/authorized_keys. ¿Estás seguro de que el usuario de github que estás intentando importar tiene claves ubicadas en https://github.com/settings/keys?

/var/log/cloud-init.logcontiene:

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)

Respuesta2

Según el ssh_import_idmódulo de documentos de Cloud-init solo está disponible para Ubuntu y Debian; sin embargo, dependiendo del tipo y la versión de Ubuntu/Debian, el ssh-import-idbinario que el módulo de Cloud-init ssh_import_idutiliza detrás de escena para recuperar las claves puede estar instalado o no. en tu distribución.

Por ejemplo,https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.qcow2no vino con él y, por lo tanto, cloud-init no pudo importar mis claves desde Github. En mi caso vi un command not founderror claro en /var/log/cloud-init-output.log.

Compruebe si ssh-import-idel comando estaba presente en su sistema inicializado. Si no estaba allí, es posible que desee intentar agregar este bloque a su user-data:

packages:
  - ssh-import-id

Respuesta3

Intentar:

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

Eso debería poner tu clave en el .ssh/authorized_keysarchivo del piusuario.

información relacionada