www-data はセキュリティ上の理由から、通常はログインシェルが禁止(/usr/sbin/nologin)されているため、通常のユーザーのように su して作成することができません。そのため、sudo を利用して実行権限を明示的に指定して操作します。
ステップ1:ディレクトリの作成と権限設定
まず、www-data のホームディレクトリ(通常は /var/www)内に .ssh ディレクトリを作成し、所有者を変更します。
# .sshディレクトリの作成
sudo mkdir -p /var/www/.ssh
# 所有者をwww-dataに変更
sudo chown www-data:www-data /var/www/.ssh
# 権限を700(本人以外読み書き不可)に設定
sudo chmod 700 /var/www/.ssh
ステップ2:キーペアの生成
sudo -u www-data を使用して、www-data ユーザーとして ssh-keygen を実行します。
sudo -u www-data ssh-keygen -t ed25519 -C "www-data@$(hostname)"
-t ed25519: 現在最も推奨される高速で安全なアルゴリズムです。-C: 公開鍵の末尾に付与されるコメントです(識別用)。- 実行時の注意:
- 「Enter file in which to save the key」と聞かれたら、そのまま Enter を押してください(デフォルトの
/var/www/.ssh/id_ed25519に保存されます)。 - 「Enter passphrase」は、自動デプロイ等で利用する場合は空(Enter 2回)にするのが一般的ですが、セキュリティ要件に応じて設定してください。
- 「Enter file in which to save the key」と聞かれたら、そのまま Enter を押してください(デフォルトの
ステップ3:公開鍵(パブリックキー)の確認
生成された公開鍵を表示してコピーします。
sudo cat /var/www/.ssh/id_ed25519.pub
表示された ssh-ed25519 AAA... から始まる文字列を、接続先サーバーの authorized_keys や、GitHub/GitLab のデプロイキーとして登録してください。
ステップ4:既知のホスト(known_hosts)への登録(重要)
www-data が初めて外部サーバー(例:github.com)にアクセスする際、接続確認のプロンプトで止まってしまうことがあります。これを防ぐため、あらかじめホスト鍵を登録しておきます。
# 例:GitHubに接続する場合
sudo -u www-data ssh-keyscan -t ed25519 github.com >> /var/www/.ssh/known_hosts
トラブルシューティング:ホームディレクトリの確認
もし上記手順で「ディレクトリがない」等のエラーが出る場合は、www-data のホームディレクトリ設定が /var/www になっているか確認してください。
grep www-data /etc/passwd
# 出力例: www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
# 6番目のフィールドがホームディレクトリです。

コメント