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層のファイアウォールを設定

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-startdev-stopスクリプトを作成。

ロックアウト

終了後、Claude Codeはrootログインが無効になっていることを確認するため、rootとしてSSH接続を試みた。ログインは失敗した。fail2banが失敗した試行に気づき、私たちをbanした。

Claude CodeはセカンダリパスとしてTailscale SSHを設定していた。tailscale sshを使って戻り、以下を実行した:

fail2ban-client set sshd unbanip 100.x.x.x

セットアップ

必要なもの:

APIキーを環境変数として保存し、名前で参照する(例:$VULTR_API_KEY)ことで、シークレットが会話に現れないようにする。

プロンプトの例:

Vultrに8コアのVMを作成し、Tailscale経由でのみアクセス可能にロックダウンし、Node/Python/Dockerをセットアップし、起動・停止用のスクリプトをください。