hetzner-server について
hcloudコマンドラインでHetzner Cloudサーバーを作成・管理するためのガイドです。クラウドホストやリモートアクセスを扱う開発者向けに、ファイアウォール、SSH、初期化スクリプト、スワップ、SSH設定同期を説明します。
主な機能
- 01クラウドサーバーの作成と確認
- 02サーバータイプ・イメージ・ロケーションの選択
- 03再利用可能なクラウドファイアウォールの設定
- 04cloud-initによるサーバー初期化
- 05SSHキーと接続の管理
- 06HetznerサーバーのSSH設定同期
活用シーン
- 01開発用Hetzner Cloudホストの作成
- 02サーバーの初期化スクリプトとスワップの設定
- 03サーバーへの公開SSHアクセスを制限
- 04SSHエージェント転送でプライベートリポジトリをクローン
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pedronauck/ skills --skill hetzner-serverインストール後、Claude Code で/hetzner-serverを入力して読み込まれたか確認します。
詳細
Hetzner サーバー管理
hcloud CLI を使用して、Hetzner Cloud サーバーを作成、管理します。
前提条件
hcloudCLI がインストールされていること(mise 経由:hcloud = "latest")- 認証済みであること:https://console.hetzner.cloud の API トークンを使用して
hcloud context create <name>を実行します
クラウドファイアウォール
サーバー作成時に適用する、再利用可能なファイアウォールプロファイルです。稼働中のサーバーでもファイアウォールを切り替えられます。apply-to-resource / remove-from-resource を使用します。
| ファイアウォール | ルール | 用途 |
|---|---|---|
ts-ssh | UDP 41641(Tailscale)+ TCP 22(SSH) | 開発用サーバー — 初期設定後、tsonlyssh を使って ts-only に切り替えます |
ts-only | UDP 41641(Tailscale) | Tailscale 経由のみのアクセス。パブリックポートはありません |
ts-web | UDP 41641(Tailscale)+ TCP 80,443(HTTP/S) | パブリックなウェブトラフィックを受け入れるサーバー |
稼働中のサーバーでファイアウォールを切り替える
hcloud firewall remove-from-resource ts-ssh --type server --server dev
hcloud firewall apply-to-resource ts-only --type server --server dev
クイックリファレンス
サーバーを作成する
# Prefer ARM (best value)
hcloud server create \
--name dev \
--type cax21 \
--image ubuntu-24.04 \
--location nbg1 \
--ssh-key connorads \
--ssh-key connor@penguin \
--firewall ts-ssh
# x86 fallback
hcloud server create \
--name dev \
--type cpx21 \
--image ubuntu-24.04 \
--location nbg1 \
--ssh-key connorads \
--ssh-key connor@penguin \
--firewall ts-ssh
# IPv6-only (saves ~$0.60/month on IPv4)
hcloud server create \
--name dev \
--type cax21 \
--image ubuntu-24.04 \
--location nbg1 \
--ssh-key connorads \
--ssh-key connor@penguin \
--firewall ts-ssh \
--without-ipv4
user-data を使用する(インストールスクリプトを自動実行)
# Use heredoc - process substitution <(echo '...') escapes the shebang incorrectly
hcloud server create \
--name dev \
--type cax21 \
--image ubuntu-24.04 \
--location nbg1 \
--ssh-key connorads \
--ssh-key connor@penguin \
--firewall ts-ssh \
--user-data-from-file - <<'EOF'
#!/bin/bash
curl -fsSL https://raw.githubusercontent.com/connorads/dotfiles/master/install.sh | bash
EOF
dotfiles のインストールには約 5 分かかります。進行状況を確認するには:
# Quick status check
ssh connor@$(hcloud server ip dev) "cloud-init status"
# View recent installation logs
ssh connor@$(hcloud server ip dev) "sudo journalctl -u cloud-final -n 50 --no-pager"
# Follow installation in real-time
ssh connor@$(hcloud server ip dev) "sudo journalctl -u cloud-final -f"
# Check if tools are installed
ssh connor@$(hcloud server ip dev) "which zsh mise && echo \$SHELL"
スワップ領域を追加する(本番環境に推奨)
Ubuntu のクラウドイメージには、デフォルトでスワップ領域が含まれていません。作成時に cloud-init を使ってスワップ領域を追加します:
# Create server with 16GB swap (1:1 ratio for 16GB RAM server)
hcloud server create \
--name dev \
--type cax33 \
--image ubuntu-24.04 \
--location nbg1 \
--ssh-key connorads \
--ssh-key connor@penguin \
--firewall ts-ssh \
--user-data-from-file - <<'EOF'
#cloud-config
swap:
filename: /swapfile
size: 16G
maxsize: 16G
EOF
推奨スワップサイズ:
- 4GB RAM → 4~8GB のスワップ領域
- 8GB RAM → 8GB のスワップ領域
- 16GB 以上の RAM → 16GB のスワップ領域(1:1 の比率)
既存のサーバーにスワップ領域を追加する:
# Create 16GB swap file
ssh connor@$(hcloud server ip dev) "sudo fallocate -l 16G /swapfile && \
sudo chmod 600 /swapfile && \
sudo mkswap /swapfile && \
sudo swapon /swapfile && \
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab"
# Verify swap is active
ssh connor@$(hcloud server ip dev) "free -h"
よく使うコマンド
# List servers
hcloud server list
# Get server IP
hcloud server ip dev
# SSH to server
ssh connor@$(hcloud server ip dev)
# Delete server
hcloud server delete dev
# Power operations
hcloud server poweroff dev
hcloud server poweron dev
hcloud server reboot dev
# Rebuild (reinstall OS, keeps IP)
hcloud server rebuild dev --image ubuntu-24.04
サーバータイプ(よく使われるもの)
EU リージョンの米ドル価格(米国リージョンは約 20%高くなります):
| タイプ | アーキテクチャ | vCPU | RAM | ディスク | 約 USD/月 |
|---|---|---|---|---|---|
| cax11 | ARM | 2 | 4GB | 40GB | $4.50 |
| cax21 | ARM | 4 | 8GB | 80GB | $8 |
| cax31 | ARM | 8 | 16GB | 160GB | $16 |
| cpx21 | x86 | 3 | 4GB | 80GB | $9 |
| cpx31 | x86 | 4 | 8GB | 160GB | $18 |
全リスト:hcloud server-type list
ロケーション
| ID | 都市 | 国 |
|---|---|---|
| fsn1 | Falkenstein | DE |
| nbg1 | Nuremberg | DE |
| hel1 | Helsinki | FI |
| ash | Ashburn | US |
| hil | Hillsboro | US |
| sin | Singapore | SG |
SSH キー
# List keys
hcloud ssh-key list
# Add a key
hcloud ssh-key create --name mykey --public-key-from-file ~/.ssh/id_ed25519.pub
イメージ
# List system images
hcloud image list --type system
# ARM images
hcloud image list --type system --architecture arm
GitHub リポジトリのクローン(SSH エージェント転送)
<name>-agent SSH ホスト(エージェント転送が有効)を使用すると、サーバーにキーをコピーせずにプライベートリポジトリをクローンできます。ホストキーエラーが発生した場合は、まず GitHub のホストキーを追加してください。
# First time only: add GitHub's host key
ssh dev "ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null"
# Confirm forwarded agent is visible
ssh dev-agent "ssh-add -l"
# Clone with agent forwarding (use -agent suffix)
ssh dev-agent "mkdir -p ~/git && cd ~/git && git clone [email protected]:you/repo.git"
# Clone specific branch
ssh dev-agent "mkdir -p ~/git && cd ~/git && git clone [email protected]:you/repo.git && cd repo && git checkout branch-name"
# Push/pull with agent forwarding
ssh dev-agent "cd repo && git push"
対話型セッション(例:lazygit)の場合:
ssh dev-agent
# Then on server: git clone/push/pull works with forwarded agent
作成後の設定
サーバーを作成した後は、必ずその IP に対する古いホストキーを削除してください(Hetzner では IP が再利用されます):
ssh-keygen -R $(hcloud server ip dev) 2>/dev/null
ssh-keyscan $(hcloud server ip dev) >> ~/.ssh/known_hosts 2>/dev/null
続いて、SSH 設定エントリーを生成/更新します:
hcssh # update ~/.ssh/config with all Hetzner servers
hcssh --dry-run # preview without writing
これにより、管理対象ブロック(# BEGIN/END hetzner-managed)内に、サーバーごとに 2 つの Host エントリーが作成されます:
<name>— エージェント転送なし(AI エージェントに安全です)<name>-agent— エージェント転送あり(GitHub への git push/pull 用)
サーバーの作成/削除後に hcssh を再実行して、SSH 設定を同期してください。
これにより、VS Code Remote-SSH のドロップダウンにサーバーが表示されます。
任意:SSH を Tailscale のみに制限する
ts up を実行し、Tailscale 経由で SSH が機能することを確認した後(ts ssh connor@dev)、サーバーで tsonlyssh を実行して UFW からパブリックポート 22 を削除します。これにより、SSH は Tailscale インターフェース経由でのみアクセス可能になります。
ロックアウトされた場合の代替手段:Hetzner Cloud Console VNC。
注意事項
- ARM(cax*)サーバーは開発作業に最もコストパフォーマンスが優れています
- IPv6 のみの構成はコストを節約できますが、IPv4 ネットワークからアクセスするには Tailscale/cloudflared が必要です
- user-data は初回起動時に root として実行されます
- dotfiles の install.sh は、ユーザー
connorの作成、Nix、home-manager、mise ツールのインストールを処理します