AIに任せる
開発サーバーが必要だった:SSHアクセスと開発ツールがインストールされたVM。Claude Codeに何が欲しいか説明して、セットアップを任せた。
プロンプト
8コアと32GBのRAMを持つVultr VMを要求した。Tailscale経由でのみアクセス可能で、ネットワーク切断に耐える永続セッション付き。
Claude Codeが構築したもの
1. Vultr API経由でVMをプロビジョニング
8コア/32GBのUbuntuインスタンスを作成し、IPを待ってから、rootとしてSSH接続した。
2. SSHを強化
Port 49152 # ランダムな高ポート
PermitRootLogin no
PasswordAuthentication no
ListenAddress 100.x.x.x # Tailscaleインターフェースのみ
鍵ベースの認証のみ、Tailscaleインターフェースのみでリッスン。
3. 3層のファイアウォールを設定
- UFW: Tailscaleサブネット以外のすべての着信を拒否
- fail2ban: ログイン試行失敗後にIPを自動ban
- Vultrファイアウォール: ハイパーバイザーレベルですべてをブロック
4. SSHを有効にしてTailscaleをインストール
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up --ssh --authkey=$TAILSCALE_KEY
これにより、OpenSSHとは独立したTailscaleのビルトインSSHサーバー経由で2つ目のSSHパスが作成される。
5. 開発スタックをインストール
Node.js(nvm経由)、Python(pyenv経由)、Docker、一般的なツール。Dockerをsudoなしで実行できるように設定。
6. tmuxで永続セッションを設定
既存のセッションに自動的に再接続する起動スクリプトで、ネットワーク切断が実行中のプロセスを終了しないようにした。
7. ローカル管理スクリプトを作成
私のラップトップに、Vultr API経由でVMを起動・停止するdev-startとdev-stopスクリプトを作成。
ロックアウト
終了後、Claude Codeはrootログインが無効になっていることを確認するため、rootとしてSSH接続を試みた。ログインは失敗した。fail2banが失敗した試行に気づき、私たちをbanした。
Claude CodeはセカンダリパスとしてTailscale SSHを設定していた。tailscale sshを使って戻り、以下を実行した:
fail2ban-client set sshd unbanip 100.x.x.x
セットアップ
必要なもの:
- Claude Code(またはツール使用可能な同様のAI)
- クラウドプロバイダーアカウント(Vultr、DigitalOcean、AWSなど)
- Tailscaleアカウント
APIキーを環境変数として保存し、名前で参照する(例:$VULTR_API_KEY)ことで、シークレットが会話に現れないようにする。
プロンプトの例:
Vultrに8コアのVMを作成し、Tailscale経由でのみアクセス可能にロックダウンし、Node/Python/Dockerをセットアップし、起動・停止用のスクリプトをください。