Wie verwende ich ssh_import_id mit Cloud-Init auf Raspberry Pi 4 /w Ubuntu 20.04 Server?

Wie verwende ich ssh_import_id mit Cloud-Init auf Raspberry Pi 4 /w Ubuntu 20.04 Server?

Ich möchte meine SSH-Schlüssel automatisch auf einer neuen Ubuntu Server 20.04-Installation auf einem Raspberry Pi 4 einrichten - hauptsächlich als Lernübung. Ich versuche, die ssh_import_idOption zu nutzen,Cloud-Init~/.ssh/authorized_keysum meinen öffentlichen SSH-Schlüssel von meinem GitHub-Konto abzurufen und ihn dem Benutzer hinzuzufügen pi.

Ich kriege es einfach nicht hin, die ssh_import_idKonfiguration zu aktivieren. Das ~/.sshVerzeichnis wird nie für den Benutzer erstellt piund es gibt keine Protokolle, die mit dem Abrufen eines Schlüssels von GitHub/ssh_import_id in /var/logs/cloud-init.logoder zu tun haben /var/log/cloud-init-output.log.

Der aktuelle Inhalt meines user-dataStammverzeichnisses der SD-Karte:

  - 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

Alles funktioniert einwandfrei, wenn ich den öffentlichen Schlüssel manuell eingebe ssh_authorized_keys, was zu meinem Arbeitsablauf passt, aber ich hoffe, dass ich das GitHub-Ding so schick einrichten kann.

Mein Verständnis von cloud-initist definitiv ein wenig grundlegend, daher habe ich möglicherweise etwas übersehen. Ich löse Änderungen aus, indem ich cloud-init cleanund dann ausführe cloud-init init, was sich anfühlt, als würde es einwandfrei laufen, da es Benutzer/allgemeine Teile/die Root-SSH-Schlüssel und den Fingerabdruck neu erstellt.

Ich verwende vermutlich auch die NoCloudDatenquelle.

Kann mir jemand helfen herauszufinden, was ich falsch mache?

Antwort1

Ist das nur ein Ausschnitt deiner Benutzerdaten? Wenn nicht, brauchst du auch den #cloud-configHeader und users:. So etwas sollte funktionieren:

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

Ich habe es gerade getestet und den Schlüssel in gefunden /home/pi/.ssh/authorized_keys. Sind Sie sicher, dass der GitHub-Benutzer, den Sie importieren möchten, Schlüssel unter hat https://github.com/settings/keys?

/var/log/cloud-init.logenthält:

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)

Antwort2

Gemäß der Dokumentation von Cloud-Init ssh_import_idist das Modul nur für Ubuntu und Debian verfügbar. Je nach Variante und Version von Ubuntu/Debian ist die ssh-import-idBinärdatei, die das Modul von Cloud-Init ssh_import_idim Hintergrund verwendet, um die Schlüssel tatsächlich abzurufen, jedoch möglicherweise nicht auf Ihrer Distribution installiert.

Zum Beispiel,https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.qcow2war nicht dabei und daher konnte cloud-init meine Schlüssel nicht von Github importieren. In meinem Fall sah ich einen eindeutigen command not foundFehler in /var/log/cloud-init-output.log.

Überprüfen Sie, ob ssh-import-idder Befehl in Ihrem initialisierten System vorhanden war. Wenn nicht, können Sie versuchen, diesen Block zu Ihrem hinzuzufügen user-data:

packages:
  - ssh-import-id

Antwort3

Versuchen zu:

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

Das sollte Ihren Schlüssel in die .ssh/authorized_keysDatei des piBenutzers setzen

verwandte Informationen