2026年5月27日

2026年5月27日

DigitalOceanのDroplet作成と初期設定:SSH鍵での作成からroot無効化・ファイアウォールまで

DigitalOcean の Droplet は、作成時に SSH 鍵を登録し、起動後すぐに「作業用ユーザーの作成」「root と パスワードでのログインの停止」「ファイアウォール」「自動セキュリティ更新」の4つを済ませれば、WordPress などを載せられる状態になります。この記事では、管理画面と doctl コマンドの両方での作成方法と、Ubuntu を前提にした初期設定の手順、締め出されたときの戻り方までを説明します。

作成前に用意するもの

用意しておくのは、手元の PC の SSH 鍵ペアだけです。まだなければ作ります。

ssh-keygen -t ed25519 -C "your-name@example.com"
cat ~/.ssh/id_ed25519.pub

表示された公開鍵(ssh-ed25519 で始まる1行)を、Droplet 作成画面で登録します。DigitalOcean ではパスワード認証で Droplet を作ることもできますが、インターネットに公開されたサーバーの SSH はパスワードの総当たりを常に受けるため、最初から鍵認証にしておくのが安全です。

管理画面で Droplet を作る

管理画面の項目名や並び順は変わることがあるので、ここでは何を決める項目かで説明します。画面の構成は執筆時点(2026年10月現在)のものですが、表記は異なる場合があります。

  • リージョン: サーバーを置くデータセンターです。読者や利用者が日本にいるなら、地理的に近いアジアのリージョンを選びます。日本国内のリージョンの有無は時期によって変わりうるので、作成画面の一覧で確認してください。リージョンは作成後に変更できず、変えるにはスナップショットから別リージョンに作り直すことになります。
  • イメージ: OS を選びます。特別な理由がなければ Ubuntu の LTS 版を選びます。サポート期間が長く、手順の情報も多いためです。
  • サイズ(プラン): CPU・メモリ・ディスクの組み合わせです。小さく始めて、後からサイズ変更(リサイズ)で増やせます。ただしディスクまで増やすリサイズは元に戻せない点に注意してください。
  • 認証方法: 先ほどの SSH 鍵を選びます。
  • 追加オプション: 自動バックアップ、監視用エージェント(メトリクスの収集)、IPv6 などです。監視用エージェントは CPU やメモリの推移を管理画面で見られるようになるので、有効にしておくと後の調査が楽になります。
  • ホスト名: web01 のように役割の分かる名前にします。後から変えられますが、ログやプロンプトに表示されるので最初に決めておくと混乱しません。

自動バックアップやスナップショットは有料のオプションです。料金体系は変わるので、公式の料金ページで確認してください。

doctl で作る場合

同じ構成を何台も作るなら、公式 CLI の doctl が便利です。API トークンを管理画面で発行し、doctl auth init で登録します。トークンはパスワードと同じ扱いで、スクリプトに直接書いたり Git に入れたりしないでください。

doctl auth init

# 選べる値を確かめる
doctl compute region list
doctl compute size list
doctl compute image list-distribution
doctl compute ssh-key list

# 作成(値は上の一覧で確かめたものに置き換える)
doctl compute droplet create web01 \
  --region sgp1 \
  --image ubuntu-24-04-x64 \
  --size s-1vcpu-1gb \
  --ssh-keys 登録済みSSH鍵のIDまたはフィンガープリント \
  --enable-monitoring \
  --wait

doctl compute droplet list --format Name,PublicIPv4,Status

リージョンやサイズ、イメージの識別子は増減するので、例の値をそのまま使わず、一覧コマンドの結果から選んでください。

初回ログインと更新

DigitalOcean の Ubuntu イメージでは、初回は root でログインします。

ssh root@203.0.113.10
apt update && apt upgrade -y
timedatectl set-timezone Asia/Tokyo

初回接続時に表示されるホスト鍵のフィンガープリントは、手元の ~/.ssh/known_hosts に記録されます。以降、同じ IP で別の鍵が出たら警告が出るので、無視せず理由を確かめてください(Droplet を作り直した場合など)。

作業用ユーザーを作る

root のまま作業を続けると、打ち間違い1つでシステム全体を壊しかねません。sudo を使える一般ユーザーを作り、以降はそのユーザーで作業します。

adduser deploy
usermod -aG sudo deploy

# root に登録されている SSH 公開鍵を、新しいユーザーにも使えるようにする
rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy

adduser で設定したパスワードは、SSH のログインではなく sudo のときに使います。

ここで root の接続を閉じずに、手元の PC の別の端末から ssh deploy@203.0.113.10 で入れること、sudo -v が通ることを確かめます。入れない状態で次の手順に進むと、自分を締め出すことになります。

root ログインとパスワード認証を止める

SSH の設定は、本体の /etc/ssh/sshd_config を直接書き換えるより、/etc/ssh/sshd_config.d/ に別ファイルを置くほうが、OS の更新で設定が衝突しにくくなります。

sudo tee /etc/ssh/sshd_config.d/10-hardening.conf > /dev/null <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF

sudo sshd -t
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication'
sudo systemctl restart ssh

ファイル名の先頭を 10- にしているのには理由があります。sshd は同じ項目が複数回出てくると 最初に読んだ値 を使い、このディレクトリのファイルは名前順に読み込まれます。作成時にパスワード認証を選んだ環境などでは、cloud-init が 50-cloud-init.conf に PasswordAuthentication yes を書いていることがあり、それより後ろの名前にすると設定が効きません。sshd -T で実際に有効な値を確かめるのはこのためです。

sshd -t は設定の文法チェックで、エラーがあれば何か表示されます。何も表示されなければ再起動して構いません。再起動後も、今つながっている接続は切れません。別の端末から deploy で新しく入れること、root では入れないことを確かめてから、元の接続を閉じます。

ファイアウォールを2段で考える

DigitalOcean には、Droplet の外側で通信を絞る「Cloud Firewalls」と、OS の中の UFW の2つがあります。どちらか一方でも動きますが、両方使う場合は 両方で許可したポートだけが通る ことを覚えておいてください。片方だけ開けて「つながらない」となるのはよくあるつまずきです。

OS 側の UFW は次のように設定します。SSH を先に許可してから有効化するのが順序の要点です。

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

Cloud Firewalls はタグで複数の Droplet にまとめて適用できるので、台数が増えるなら web などのタグを付けて管理すると楽です。SSH の受け付け元を自社の固定 IP などに限れるなら、Cloud Firewalls 側で絞っておくと、ログに残る不正なログインの試行がほとんどなくなります。

自動セキュリティ更新

Ubuntu では unattended-upgrades でセキュリティ更新を自動で当てられます。DigitalOcean のイメージには入っていることが多いですが、念のため確認します。

sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
systemctl status unattended-upgrades

カーネルの更新は再起動するまで反映されません。/var/run/reboot-required があれば再起動待ちなので、利用の少ない時間帯に再起動します。

締め出されたときの戻り方

SSH の設定を誤って入れなくなっても、管理画面の Droplet のページから Web ブラウザー上のコンソールで入れます(画面での名称は変わることがあります)。コンソールでは /etc/ssh/sshd_config.d/10-hardening.conf を消すか直してから sudo systemctl restart ssh を実行します。それでも起動しない場合は、リカバリー用の起動に切り替えてディスクをマウントする方法があります。

大きな変更の前には、電源を切ってスナップショットを取っておくと、失敗しても作業前の状態から作り直せます。

初期設定が終わったら

ここまでで、鍵認証だけで入れる、root で入れない、必要なポートだけが開いている、更新が自動で当たる、という状態になりました。次は用途に合わせて Web サーバーや PHP、データベースを入れていきます。IP アドレスを変えずにサーバーを入れ替えたい場合は、Droplet に付け外しできる固定の IP(Reserved IP)を使うと、DNS を書き換えずに切り替えられます。

まとめ

  • 作成時は SSH 鍵で認証し、リージョンは後から変えられない点に注意して選ぶ。
  • 同じ構成を何台も作るなら doctl。値は一覧コマンドで確認し、API トークンは秘密情報として扱う。
  • 作業用ユーザーで入れることを別の端末で確かめてから、root ログインとパスワード認証を止める。
  • sshd_config.d のファイルは名前順・最初の値が有効。sshd -T で実際の値を確かめる。
  • Cloud Firewalls と UFW は両方で許可したポートだけが通る。
  • 締め出されたら管理画面のコンソールから設定を戻す。大きな変更の前はスナップショットを取る。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲