Como usar ssh_import_id com cloud-init no Raspberry Pi 4/w Ubuntu 20.04 Server?

Como usar ssh_import_id com cloud-init no Raspberry Pi 4/w Ubuntu 20.04 Server?

Estou tentando configurar automaticamente minhas chaves SSH em uma nova instalação do Ubuntu Server 20.04 em um Raspberry Pi 4 - principalmente como um exercício de aprendizado. Estou tentando usar a ssh_import_idopção denuvem-initpara extrair minha chave pública SSH da minha conta GitHub e adicioná-la ~/.ssh/authorized_keyspara o piusuário.

Não consigo fazer a ssh_import_idconfiguração funcionar. O ~/.sshdiretório nunca é criado para o piusuário e não há registros relacionados a nada relacionado à extração de uma chave de GitHub/ssh_import_id em /var/logs/cloud-init.logou /var/log/cloud-init-output.log.

O conteúdo atual do meu user-datana raiz do cartão 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

Tudo funciona bem se eu inserir a chave pública manualmente usando ssh_authorized_keys, o que se adequará ao meu fluxo de trabalho, mas espero configurar o GitHub, pois é elegante.

Meu entendimento cloud-inité definitivamente um pouco básico, então posso ter perdido alguma coisa. Estou acionando alterações executando cloud-init cleane então cloud-init init, o que parece estar funcionando bem, pois está refazendo os usuários/bits gerais/as chaves ssh raiz e a impressão digital.

Presumivelmente, também estou usando a NoCloudfonte de dados.

Alguém pode me ajudar a descobrir o que estou fazendo de errado?

Responder1

Isso é apenas um trecho dos dados do seu usuário? Caso contrário, você também precisará do #cloud-configcabeçalho e do arquivo users:. Algo assim deve funcionar:

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

Acabei de testar e encontrei a chave em /home/pi/.ssh/authorized_keys. Você tem certeza de que o usuário do GitHub que você está tentando importar possui chaves localizadas em https://github.com/settings/keys?

/var/log/cloud-init.logcontém:

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)

Responder2

De acordo com o ssh_import_idmódulo de documentos do cloud-init está disponível apenas para Ubuntu e Debian, no entanto, dependendo do sabor e da versão do Ubuntu/Debian, o ssh-import-idbinário que o módulo do cloud-init ssh_import_idusa nos bastidores para realmente recuperar as chaves pode ou não ser instalado na sua distro.

Por exemplo,https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.qcow2não veio com ele e, portanto, o cloud-init falhou ao importar minhas chaves do Github. No meu caso, vi um command not founderro claro no arquivo /var/log/cloud-init-output.log.

Verifique se ssh-import-ido comando estava presente em seu sistema inicializado. Se não estiver lá, você pode tentar adicionar este bloco ao seu user-data:

packages:
  - ssh-import-id

Responder3

Tente:

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

Isso deve colocar sua chave no .ssh/authorized_keysarquivo do piusuário

informação relacionada