[Ubuntu]www-dataユーザで公開鍵作成

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回)にするのが一般的ですが、セキュリティ要件に応じて設定してください。

ステップ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番目のフィールドがホームディレクトリです。

コメント

タイトルとURLをコピーしました