mcpField
H
hetzner-server

hetzner-server

github.com/connoradsクラウド・DevOps18233 回インストール2 日前に更新
リポジトリ

hetzner-server について

hetzner-serverは、hcloud CLIでHetzner Cloudサーバーを作成・管理するためのスキルです。サーバーの構築や保守を行う担当者向けに、ファイアウォール、初期化、SSH設定、アクセス方法を案内します。

主な機能

  1. 01hcloud CLIでのサーバー作成
  2. 02再利用可能なファイアウォール設定
  3. 03cloud-initによるセットアップスクリプト実行
  4. 04swap設定とインストール進捗の確認
  5. 05サーバーのSSH設定同期
  6. 06SSHエージェント転送による非公開リポジトリのクローン

活用シーン

  1. 01初期化スクリプト付きのHetzner Cloudサーバー作成
  2. 02作成後のファイアウォールルール変更
  3. 03swap設定とサーバー状態の確認
  4. 04転送したSSHエージェントでの非公開GitHubリポジトリへのアクセス

インストール

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

$npx skills add https://github.com/connorads/dotfiles --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)開発用サーバー。初期設定に使用し、UFW で Tailscale のみに制限した後 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

IPv6 のみを使用する場合の注意点: hcloud server ip <name> と hcssh は IPv4 を前提としています。 server ip は有用な情報を出力せず、hcssh は ipv4 列のみを読み取るため、管理対象の Host エントリは空になります。--without-ipv4 を指定したサーバーでは、hcloud server ip --ipv6 <name> を使用します(/64 が返され、ホストは ...::1 です)。SSH Host エントリを手動で記述するか、ts up の実行後に Tailscale 経由で接続してください。

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"
swap を使用する(本番環境に推奨)

Ubuntu のクラウドイメージには、デフォルトで swap が含まれていません。作成時に cloud-init で swap を追加します:

# Create server with 16GB swap (1:1 ratio for 16GB RAM server)
hcloud server create \
  --name dev \
  --type cax31 \
  --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

推奨 swap サイズ:

  • 4GB RAM → 4-8GB swap
  • 8GB RAM → 8GB swap
  • 16GB 以上 → 16GB swap(1:1 の比率)

既存のサーバーに swap を追加する:

# 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"
リファレンスの検索

サーバータイプ、ロケーション、イメージ、SSH キー、日常的なサーバー操作は、実行時に確認できます。暗記せず、その都度調べてください:

hcloud server-type list                              # ARM cax* preferred (best value); cpx* x86 fallback
hcloud location list                                 # nbg1 is the usual default here
hcloud image list --type system --architecture arm
hcloud ssh-key list
hcloud server list|ip|delete|poweroff|poweron|reboot|rebuild   # rebuild keeps the IP

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)を確認した後、サーバー上で以下のコマンドを実行し、SSH を Tailscale インターフェースのみに制限します:

sudo ufw delete allow 22/tcp
sudo ufw allow in on tailscale0 to any port 22 proto tcp comment 'SSH via Tailscale'
sudo ufw reload

接続できなくなった場合は、Hetzner Cloud Console の VNC を使用してください。

注意事項

  • IPv6 のみを使用するとコストを抑えられますが、IPv4 ネットワークからアクセスするには Tailscale/cloudflared が必要です
  • user-data は初回起動時に root として実行されます
  • dotfiles の install.sh は、ユーザー connor の作成、Nix、home-manager、および mise ツールのインストールを処理します

コメント