
私は、主に学習の練習として、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-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
、ユーザー/一般ビット/ルート 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
cloud-init のドキュメントによると、ssh_import_id
モジュールは 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