mcpField
H
hetzner-server

hetzner-server

github.com/pedronauckクラウド・DevOps647181 回インストール1 週間前に更新
リポジトリ

hetzner-server について

hcloudコマンドラインでHetzner Cloudサーバーを作成・管理するためのガイドです。クラウドホストやリモートアクセスを扱う開発者向けに、ファイアウォール、SSH、初期化スクリプト、スワップ、SSH設定同期を説明します。

主な機能

  1. 01クラウドサーバーの作成と確認
  2. 02サーバータイプ・イメージ・ロケーションの選択
  3. 03再利用可能なクラウドファイアウォールの設定
  4. 04cloud-initによるサーバー初期化
  5. 05SSHキーと接続の管理
  6. 06HetznerサーバーのSSH設定同期

活用シーン

  1. 01開発用Hetzner Cloudホストの作成
  2. 02サーバーの初期化スクリプトとスワップの設定
  3. 03サーバーへの公開SSHアクセスを制限
  4. 04SSHエージェント転送でプライベートリポジトリをクローン

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pedronauck/skills --skill hetzner-server

インストール後、Claude Code で/hetzner-serverを入力して読み込まれたか確認します。

詳細

Hetzner サーバー管理

hcloud CLI を使用して、Hetzner Cloud サーバーを作成、管理します。

前提条件

  • hcloud CLI がインストールされていること(mise 経由:hcloud = "latest")
  • 認証済みであること:https://console.hetzner.cloud の API トークンを使用して hcloud context create <name> を実行します

クラウドファイアウォール

サーバー作成時に適用する、再利用可能なファイアウォールプロファイルです。稼働中のサーバーでもファイアウォールを切り替えられます。apply-to-resource / remove-from-resource を使用します。

ファイアウォールルール用途
ts-sshUDP 41641(Tailscale)+ TCP 22(SSH)開発用サーバー — 初期設定後、tsonlyssh を使って ts-only に切り替えます
ts-onlyUDP 41641(Tailscale)Tailscale 経由のみのアクセス。パブリックポートはありません
ts-webUDP 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%高くなります):

タイプアーキテクチャvCPURAMディスク約 USD/月
cax11ARM24GB40GB$4.50
cax21ARM48GB80GB$8
cax31ARM816GB160GB$16
cpx21x8634GB80GB$9
cpx31x8648GB160GB$18

全リスト:hcloud server-type list

ロケーション
ID都市国
fsn1FalkensteinDE
nbg1NurembergDE
hel1HelsinkiFI
ashAshburnUS
hilHillsboroUS
sinSingaporeSG
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 ツールのインストールを処理します

コメント