Raspberry Pi 4 /w Ubuntu 20.04 Server で cloud-init と ssh_import_id を使用する方法は?

Raspberry Pi 4 /w Ubuntu 20.04 Server で cloud-init と ssh_import_id を使用する方法は?

私は、主に学習の練習として、Raspberry Pi 4にインストールしたUbuntu Server 20.04でSSHキーを自動的に設定したいと考えていますssh_import_idクラウド初期化GitHub アカウントから SSH 公開キーを取得し、ユーザー~/.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-dataSD カードのルートにある現在の内容:

  - 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 cleancloud-init init、ユーザー/一般ビット/ルート ssh キーとフィンガープリントが再作成されるため、正常に実行されているように感じます。

おそらくNoCloudデータソースも使用しています。

私が何を間違っているのかを解明するのを手伝ってくれる人はいませんか?

答え1

それはユーザーデータの一部だけですか? そうでない場合は、ヘッダーとも必要です#cloud-configusers:次のようなものが機能するはずです:

#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

cloud-init のドキュメントによると、ssh_import_idモジュールは Ubuntu と Debian でのみ使用可能ですが、Ubuntu/Debian の種類とバージョンによっては、ssh-import-idcloud-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

関連情報