Linux サーバーに Claude Code と ChatGPT Codex をインストールする:ステップバイステップ
インストール直後の Debian または Ubuntu サーバーから、動作する AI エージェントまで:ユーザーと sudo 許可リスト、Node.js 22、Claude Code と Codex CLI のインストールとログイン、CLAUDE.md と AGENTS.md、最初のタスクと典型的なエラー。
このガイドでは、インストール直後の Debian または Ubuntu サーバーから、ログを分析し、設定を確認し、保守タスクを実行する動作可能な AI エージェントまでを扱います。Claude Code(Anthropic)と Codex CLI(OpenAI、ChatGPT の背後にあるコマンドラインツール)を、どちらも権限を制限した専用ユーザーの下で設定します。すべてのコマンドは Debian 13 と Ubuntu 24.04 を載せた KernelHost KVM ルートサーバー でテスト済みです。AI マネージドサーバーの全体像とどんな構成があるかは、記事 AI マネージドサーバー:AI エージェントを安全に接続する で説明しています。
2026 年 9 月時点の情報です。ツールは急速に進化しています。迷ったらclaude --helpまたはcodex --helpでフラグを確認してください。
前提条件
- Debian 12 または 13、あるいは Ubuntu 22.04 または 24.04 を載せ、SSH で root アクセスできるルートサーバー。AlmaLinux と Rocky Linux でも手順は同じで、パッケージコマンドが
aptではなくdnfになるだけです。 - 基本的な堅牢化が済んでいること:鍵による SSH ログイン、ファイアウォール、自動セキュリティ更新。新しいルートサーバーのチェックリスト がこれをカバーします。
- Anthropic のアカウント(Claude Pro、Max、Team)または API キー、ChatGPT アカウント(Plus、Pro、Team)または OpenAI API キー。一方のツールだけを設定するなら、どちらか片方で十分です。
api.anthropic.comとapi.openai.comへの外向き HTTPS。KernelHost サーバーでは最初から許可されています。厳しい独自ファイアウォールを使っている場合は許可が必要です。
ステップ 1:専用ユーザーを作成し、sudo を制限する
エージェントは決して root として動かしません。専用アカウントを与え、sudo の許可リストで必要なコマンドだけを渡します。まずはいくつかの読み取り専用コマンドから始め、タスクが本当に必要とするときにリストを広げてください。
sudo adduser --disabled-password --gecos "AI agent" aiagent
sudo tee /etc/sudoers.d/aiagent >/dev/null <<'EOF'
aiagent ALL=(root) NOPASSWD: /usr/bin/journalctl *, /usr/bin/systemctl status *, /usr/bin/systemctl restart nginx, /usr/bin/apt-get update, /usr/bin/apt-get upgrade -y, /usr/bin/tail *, /usr/bin/df *, /usr/bin/ss *
EOF
sudo chmod 440 /etc/sudoers.d/aiagent
sudo visudo -cf /etc/sudoers.d/aiagent
最後の行は構文をチェックします。sudoers ファイルのミスは全員の sudo をロックしかねないので、チェックは常に手順の一部です。--disabled-password により、誰もパスワードで aiagent としてログインできなくなります。後で sudo -iu aiagent でこのアカウントに切り替えます。
エージェントに /etc 内のファイルを変更させる場合、sudo 経由で nano を与えてはいけません(それでは /etc/sudoers を含むあらゆるファイルを編集できてしまいます)。代わりにグループと的を絞った書き込み権限を使います。たとえば setfacl -m u:aiagent:rw /etc/nginx/sites-available/my-site.conf のようにします。最初のうちは、エージェントが変更を提案し、あなたが実行するだけで十分です。
ステップ 2:Node.js 22 をインストールする
どちらのツールも Node.js 上で動作します。Claude Code はバージョン 18 以上、Codex CLI は 22 以上を必要とするので、22 LTS をインストールします。Debian 12 のパッケージソースのバージョンは古すぎるため、NodeSource から最新版を入れます。
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version
インターネットから取得したスクリプトを root 権限で実行したくない場合は、エージェントユーザーのホームディレクトリで nvm を使います。これなら root 権限はまったく不要です。詳細と代替手段は Debian での Node.js ガイド を参照してください。
ステップ 3:Claude Code をインストールしてログインする
ここからはエージェントのアカウントで作業します。
sudo -iu aiagent
curl -fsSL https://claude.ai/install.sh | bash
claude --version
ネイティブインストーラーは Claude Code を ~/.local/bin に配置し、自動で最新の状態を保ちます。代わりに npm で npm install -g @anthropic-ai/claude-code としても構いません。EACCES で失敗する場合は、下のトラブルシューティングを参照してください。
claude の初回起動時、ツールはログインを求めます。Claude アカウントの場合、通常はブラウザーを開きます。ブラウザーのないサーバーではアドレスとコードが表示されるので、ノート PC やスマートフォンで確認します。スクリプトや cron ジョブには API キーのほうが適しています。
echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "OK とだけ答えて"
これでキーは他のユーザーが読めないエージェントユーザーのホームディレクトリにだけ存在します。Anthropic のコンソールで月額の支出上限を付けて作成すれば、暴走したセッションが高額になることもありません。
ステップ 4:サーバー向けに Claude Code を設定する
Claude Code は起動時にカレントディレクトリの CLAUDE.md を読み込みます。ここにすべてのセッションに適用されるルールを書きます。エージェントのホームディレクトリに、このファイルを含む作業ディレクトリを作成します。
mkdir -p ~/server && cd ~/server
cat > CLAUDE.md <<'EOF'
# このサーバーのルール
- これは本番サーバーです(Debian 13、nginx、PHP-FPM、MariaDB)。
- 読み取り専用コマンド(journalctl、systemctl status、tail、df、ss)は常に許可。
- 書き込みを伴うコマンドの前には、何が変わるかを簡潔に説明し、承認を待つこと。
- パッケージの削除、/var/lib 配下のファイル削除、ユーザーの作成や削除は決して行わない。
- パスワード、鍵、顧客データを出力に繰り返さない。
- 各タスクの最後に 3 文の要約を書く。
EOF
さらにツールの許可リストを用意し、Claude Code が読み取り専用コマンドは確認なしで実行し、それ以外は承認を求めるようにします。ファイル ~/.claude/settings.json はこのユーザーに適用されます。
mkdir -p ~/.claude
cat > ~/.claude/settings.json <<'EOF'
{
"permissions": {
"allow": [
"Bash(sudo journalctl:*)",
"Bash(sudo systemctl status:*)",
"Bash(sudo tail:*)",
"Bash(df:*)",
"Bash(free:*)",
"Bash(ss:*)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(sudo rm:*)",
"Bash(dd:*)",
"Bash(mkfs:*)"
]
}
}
EOF
では最初のタスクを対話的に実行します。
cd ~/server && claude
> 直近 24 時間の journalctl のエラーを要約し、最も多い原因を 3 つ挙げてください。
同じタスクを無人で、たとえば毎朝 7 時の cron ジョブとして実行し、結果をメールで受け取ることもできます。
0 7 * * * cd /home/aiagent/server && /home/aiagent/.local/bin/claude -p "直近 24 時間の journalctl のエラーと警告を要約してください。サービス名、時刻、考えられる原因を挙げてください。" --allowedTools "Bash(sudo journalctl:*)" 2>&1 | mail -s "サーバー日次レポート" admin@example.com
フラグ -p は対話セッションなしで Claude Code を起動し、--allowedTools はツールをその実行に必要なものだけに制限します。書き込みを伴う操作は無人実行には含めません。
ステップ 5:Codex CLI(ChatGPT)をインストールしてログインする
Codex CLI は、ChatGPT の背後にあるモデルをコマンドラインに持ち込む OpenAI のツールです。同じユーザーアカウントでインストールします。
npm install -g @openai/codex
codex --version
ログインは ChatGPT アカウント(Plus、Pro、Team)で行います。codex を起動し、「Sign in with ChatGPT」を選び、表示されたアドレスをブラウザーのあるデバイスで開きます。スクリプト用には代わりに OpenAI プラットフォームの API キーを設定します。
echo 'export OPENAI_API_KEY="sk-..."' >> ~/.bashrc
source ~/.bashrc
Codex には独自のサンドボックスと承認モードがあります。どちらも ~/.codex/config.toml で指定します。本番サーバーでは次の組み合わせが妥当です。
mkdir -p ~/.codex
cat > ~/.codex/config.toml <<'EOF'
approval_policy = "on-request"
sandbox_mode = "workspace-write"
EOF
workspace-write は現在の作業ディレクトリへの書き込みだけを許可し、on-request はそれ以外のすべてについてエージェントに許可を求めさせます。danger-full-access レベルは両方を解除するもので、本番システムには不向きです。CLAUDE.md と同様のルールを、Codex は作業ディレクトリの AGENTS.md から読み込みます。同じ内容を使えます。
cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "有効化されている systemd サービスがすべて動作しているか確認し、失敗しているものを最後のエラーメッセージとともに一覧にしてください。"
無人実行には codex exec "タスク" があり、これは claude -p に相当します。
代替案:エージェントは自分の PC で動き、SSH 経由で作業する
サーバーに何もインストールしたくない場合は、ノート PC で Claude Code または Codex を起動し、エージェントに SSH でコマンドを送らせます。そのためにサーバーにはエージェントユーザー用の専用 SSH 鍵を用意し、CLAUDE.md にはすべてのサーバーコマンドを ssh aiagent@server で始めるというルールを書きます。たまの保守にはこれで十分ですが、長いタスクや cron ジョブはサーバー上で直接動かすほうが適しています。
ステップ 6:保護し、制限を設ける
- 何かを変更するセッションの前には必ずスナップショットかバックアップを。 サーバーのバックアップ戦略 で自動化の方法を説明しています。
- 承認モードはオンのままにする。 Claude Code の
--dangerously-skip-permissionsと Codex のdanger-full-accessは使い捨て VM のためのものです。 - 秘密情報は手の届かない場所に。 エージェントユーザーが
.envファイル、データベースのパスワード、顧客データを読めないようにします。読んだものはプロバイダーに送られます。 - プロバイダーのコンソールで、各 API キーにコスト上限を。
- 追跡可能性:
etckeeperをインストールして/etc配下のすべての変更を Git に入れ、エージェントの要約を保存します。 - 受信側は何も変えない。 どちらのツールも外向き HTTPS しか必要としません。ファイアウォール、Fail2ban、プロバイダーの DDoS 対策はそのままです。
典型的なエラーと解決策
| メッセージ | 原因と解決策 |
npm install -g で EACCES: permission denied | npm がシステムディレクトリに書き込もうとしています。ユーザープレフィックスを設定します:npm config set prefix ~/.npm-global、次に export PATH=~/.npm-global/bin:$PATH を ~/.bashrc に追加して再インストール。 |
Node.js version ... is not supported | ディストリビューションのソースのバージョンが古すぎます。ステップ 2 を繰り返し、node --version で 22.x が有効か確認します。 |
| ログイン時にブラウザーが開かない | サーバーでは想定どおりです。表示されたアドレスを別のデバイスで開いてコードを入力するか、API キーに切り替えます。 |
起動時に ECONNREFUSED またはタイムアウト | 外向き HTTPS がブロックされています。外向きポート 443 のファイアウォールルールを確認してください。KernelHost サーバーでは外向きトラフィックは最初から自由です。 |
429 rate limit または overloaded | サブスクリプションや API の上限を使い切ったか、プロバイダーが過負荷です。少し待ち、無人実行には数分後の再試行を設けます。 |
| エージェントがコマンドのたびに確認する | ~/.claude/settings.json の許可リスト、または config.toml の approval_policy を広げます。ただし読み取り専用コマンドに限ります。 |
まとめ
サーバー上の AI エージェントは 1 時間で設定できます。ユーザー、sudo 許可リスト、Node.js、ツール、ルール。本当の作業は制限の設計にあり、ここでは意図的に厳しくしています。タスクが必要とするときに一歩ずつ広げ、決して一気に広げないでください。KernelHost ルートサーバー や 専用サーバー では、そのために有効化すべきものは何もありません。ルート権限、ディストリビューションの自由な選択、外向き接続は標準です。
よくあるご質問
Claude Code にはサブスクリプションが必要ですか、それとも API キーで十分ですか?
ブラウザーのないサーバーで Codex CLI にログインするには?
どの Node.js バージョンが必要ですか?
npm install -g が EACCES で失敗するのはなぜですか?
Claude Code を cron ジョブで実行できますか?
KernelHost の Windows サーバーでも動作しますか?
2026 KernelHost GmbH。無断複写・転載を禁じます。本ガイドは著作権により保護されております。他のウェブサイトへの掲載は、一部のみの場合や編集を加えた場合であっても、当社の書面による同意なしには認められません。出典の明記とリンクを添えた引用は歓迎いたします。

