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

TIPS
TIPSコマンド

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回)にするのが一般的ですが、セキュリティ要件に応じて設定してください。
[Ubuntu]www-dataユーザで公開鍵作成
コメント数といいね数から質を数値化
コメント数といいね数のバランスから、単なる割り算を超えて「コメント欄の質」や「議論の盛り上がり」を正しく評価する3つの計算式を解説。ラプラススムージングや対数スケーリングを用い、分母が小さい投稿が有利になる現象を解決します。

ステップ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番目のフィールドがホームディレクトリです。
Q よくある質問 (FAQ)
Q. なぜwww-dataユーザーに直接切り替えて(suして)鍵を生成できないのですか?
A.
セキュリティ上の理由からログインシェルが禁止(/usr/sbin/nologin)されているためです。そのため、sudo -u www-dataコマンドを使用して実行権限を明示的に指定して操作する必要があります。
Q. 鍵生成時のパスフレーズは設定すべきですか?
A.
CI/CDツールやスクリプトによる自動デプロイ等で利用する場合は、パスフレーズを空(設定なし)にするのが一般的です。ただし、セキュリティ要件に応じて設定を検討してください。
Q. 鍵を設定したのに接続時に処理が止まってしまうのはなぜですか?
A.
初回接続時のホスト確認プロンプト(yes/noの入力待ち)で停止している可能性があります。事前にssh-keyscanコマンドを使用して、接続先ホストをknown_hostsに登録しておくことで回避できます。

コメント

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