Hermes AgentをHetzner VPSで24時間稼働させる手順(Tailscale + Telegram連携)

Hermes AgentをHetzner VPSで24時間稼働させる手順(Tailscale + Telegram連携)

自立型AIエージェント Hermes Agent を Hetzner VPS(月€3.49〜)上で24時間稼働させる手順。Tailscale で SSH を閉じ込め、Telegram から指示を送れる環境まで、実際の設定値付きで解説します。

18min

Hermes Agent(新しいタブで開く) は、Nous Research が開発している自立型 AI エージェントです。ターミナル操作や Web 検索、Telegram などのメッセージング連携を通じて、PC の横にいなくてもタスクを任せられるのが特徴です。

この記事では、Hermes Agent を Hetzner VPS 上で 24 時間稼働 させるまでの手順をまとめます。VPS の契約から、Tailscale による SSH の閉じ込め、Hermes Agent のインストール・Telegram 連携まで、実際に行った設定をそのまま書き起こしています。作業の参考にした Reddit のホスティングガイド(新しいタブで開く) もありますが、ここでは自分の環境に合わせて調整した内容を載せています。

想定読者: Linux の基本コマンドや SSH 鍵の扱いに慣れた方。Docker の知識は不要です。

所要時間の目安: 全体で 2〜3 時間(Hetzner の本人確認待ちを含む)。VPS 作成後の作業は 1〜2 時間 程度です。

なぜ VPS で Hermes Agent を動かすのか

ローカル実行との違い

Hermes Agent はローカル PC でも動かせます。ただ、ローカルだと PC を閉じたりスリープさせたりした瞬間にエージェントも止まります。外出先から Telegram で指示を送りたい、cron で定期タスクを回したい、という用途には向きません。

VPS に載せれば、自分の PC の電源状態に依存せず常時稼働できます。メッセージング gateway を systemd サービスとして登録しておけば、サーバー再起動後も自動で立ち上がります。

なぜ Hetzner を選んだか

VPS プロバイダはいくつか候補がありましたが、Hetzner Cloud を選びました。理由はシンプルで、月額数ユーロから借りられて、スペックも Hermes Agent の用途に十分 だからです。

今回契約した CX23(Cost-Optimized)は、2 vCPU・4 GB RAM・40 GB NVMe・月間 20 TB トラフィック付きで、EU リージョンなら 月額 €3.49 程度(2026年6月時点、税別)です。エージェントを常時動かすだけなら、このプランで余裕があります。

全体像と事前準備

この記事でやること

大まかな流れは次のとおりです。

  1. Hetzner で VPS を契約する
  2. VPS に SSH 接続し、OS の更新・ユーザー作成・ファイアウォール設定を行う
  3. Tailscale を入れて、SSH を Tailscale 経由のみに限定する
  4. Hermes Agent をインストールし、OpenRouter・Telegram などを設定する
  5. gateway を systemd サービスとして常時稼働させる

事前に用意しておくもの

VPS の作業に入る前に、以下のアカウントを用意しておくとスムーズです。

サービス用途
Hetzner CloudVPS の契約・管理
TailscaleVPN 経由の SSH アクセス
OpenRouterLLM の推論 API(従量課金)
TelegramHermes Agent とのチャット連携

SSH 鍵も事前に生成しておき、Hetzner の VPS 作成時に登録します。

かかる費用の目安

項目金額(目安)
Hetzner CX23(EU)約 €3.49/月(税別)
OpenRouter従量課金(モデル・利用量による)
Tailscale個人利用なら無料枠で十分
Telegram無料

OpenRouter は使った分だけ課金されます。今回デフォルトモデルに deepseek/deepseek-v4-pro を選びましたが、用途に応じて別モデルに切り替えることもできます。

Hetzner で VPS を契約する

アカウント登録と本人確認

Hetzner Cloud のアカウントを作成したあと、本人確認(Identity Verification) が必要です。確認が完了するまで、借りられるサーバーの一覧すら閲覧できません。

私は運転免許証で本人確認を行い、5〜10 分ほどで完了 しました。書類の種類や混雑状況によってはもう少しかかる場合もあると思います。

支払い通貨の注意点(EUR vs USD)

Hetzner はドイツの会社で、基本料金はすべてユーロ(EUR)建て です。クレジットカード登録時に支払い通貨を選ぶ画面がありますが、ここで USD を選ぶと為替レートの上乗せ換算が入り、実質的に割高になるケースが多い ので注意が必要です。

さらに、支払い通貨は後から変更できません。迷ったら EUR を選んでおくのが無難です。

VPS の作成設定

VPS 作成時の設定は次のとおりです。

項目設定値
リージョンドイツ Nuremberg
プランCX23(Cost-Optimized)
OSUbuntu 24.04
ネットワークPublic IPv4 + Public IPv6
SSH 鍵事前に登録した公開鍵
サーバー名hermes-agent

Volumes、Firewalls、Backups、Placement Groups、Labels、Cloud Config は すべて未設定 のまま進めました。後から必要になったら追加できます。

一点、サーバーの空き状況によってはプランやリージョンが選べない ことがあります。CX23 が Nuremberg で取れなかった場合は、別リージョンや近いスペックのプランを検討してください。

VPS に SSH 接続して初期設定する

初回 SSH 接続

VPS が起動したら、Hetzner のコンソールに表示される IP アドレスを使って root で接続します。

Terminal window
ssh root@<VPSのIPアドレス>

初回接続時はホスト鍵の確認プロンプトが出るので、yes と入力します。

システムのアップデート

まず OS を最新の状態に更新します。

Terminal window
apt update && apt upgrade -y

アップグレード後に カーネル更新の再起動を促すメッセージ が出ることがあります。作業の区切りで reboot してから次に進むとよいでしょう。

続けて、以降の作業で使うパッケージをインストールします。

Terminal window
apt install -y curl git ufw

専用ユーザー hermes の作成

root のまま Hermes Agent を動かすのは避け、専用ユーザーを作成します。

Terminal window
adduser hermes --disabled-password --gecos ""
usermod -aG sudo hermes
echo "hermes ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/hermes
chmod 440 /etc/sudoers.d/hermes

root に登録済みの SSH 鍵を hermes ユーザーにもコピーします。

Terminal window
mkdir -p /home/hermes/.ssh
cp ~/.ssh/authorized_keys /home/hermes/.ssh/
chown -R hermes:hermes /home/hermes/.ssh
chmod 700 /home/hermes/.ssh
chmod 600 /home/hermes/.ssh/authorized_keys

以降の Hermes Agent のセットアップは、この hermes ユーザーで行います。

セキュリティ設定(UFW と Tailscale)

VPS をインターネットに公開したままにする以上、SSH の扱いには注意が必要です。今回は Tailscale 経由でのみ SSH を許可する 構成にしました。

UFW の基本設定

Ubuntu 標準の UFW(Uncomplicated Firewall)で、デフォルトポリシーを設定します。

Terminal window
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw enable

ufw enable 実行時に SSH 接続が切れる可能性がある旨の警告が出ます。Tailscale 設定前の段階なので、ここではパブリック IP 向けの SSH を一時的に許可した状態で進めます。

Tailscale のインストールと接続

Tailscale の公式インストールスクリプトで導入します。

Terminal window
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up

表示された URL をブラウザで開き、Tailscale アカウントと VPS を紐づけます。接続後、tailscale status で VPS が Tailscale ネットワーク上に表示されることを確認します。

追加のオプションとして、次も設定しました。

Terminal window
sudo tailscale up --accept-routes --ssh --advertise-exit-node=false

--ssh を有効にすると、Tailscale の SSH 機能も使えるようになります。

SSH を Tailscale 経由のみに限定する

Tailscale が動作していることを確認したら、パブリック IP 向けの SSH ルールを削除 し、Tailscale インターフェース(tailscale0)経由のみ SSH を許可します。

Terminal window
sudo ufw allow in on tailscale0 to any port 22
sudo ufw status numbered

tailscale0 向けのルールを追加した時点では、おおむね次のように パブリック IP 向けの SSH ルールが残っている 状態です。

Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 22 on tailscale0 ALLOW IN Anywhere
[ 3] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 4] 22 (v6) on tailscale0 ALLOW IN Anywhere (v6)

[ 1][ 3] のパブリック IP 向けルールを削除します。番号は削除のたびにずれるので、大きい番号から順に 実行してください。

Terminal window
sudo ufw delete 3 # 22/tcp (v6) を削除
sudo ufw delete 1 # 22/tcp を削除
sudo ufw reload

最終的なルールは、おおむね次の状態です。

[ 1] 22 on tailscale0 ALLOW IN Anywhere
[ 2] 22 (v6) on tailscale0 ALLOW IN Anywhere (v6)

これ以降、SSH 接続は Tailscale ネットワーク内の IP アドレス(例: 100.x.x.x)を使います。パブリック IP への直接 SSH は遮断されます。

Hermes Agent をインストールする

インストール

hermes ユーザーに切り替えて、公式のインストールスクリプトを実行します。

Terminal window
su - hermes
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

Setup Wizard の選択

インストール後、対話形式の Setup Wizard が起動します。最初の選択肢は次の 2 つです。

  1. Quick Setup(Nous Portal) — OAuth ログインで API キー不要
  2. Full setup — プロバイダー・ツールを自分で設定

今回は OpenRouter の API キーを使いたかったので、2. Full setup を選びました。

Hermes Agent の各種設定

Setup Wizard は項目が多いですが、今回実際に設定した内容を順にまとめます。

LLMプロバイダー(OpenRouter)

LLM Provider では OpenRouter を選択し、OpenRouter のダッシュボード(新しいタブで開く) で発行した API キーを入力しました。

デフォルトモデルは deepseek/deepseek-v4-pro に設定しています。OpenRouter 上では入力 $0.435 / 出力 $0.87(100万トークンあたり)の料金帯です。コストと性能のバランスを考えてこのモデルにしました。

ターミナルバックエンド

Terminal Backend は Local(この VPS 上で直接実行) のままにしました。Docker や Modal などの隔離環境も選べますが、まずはシンプルにローカル実行で試すのがよいと判断しました。

Wizard では推奨デフォルト(Max iterations: 150 など)がそのまま適用されました。細かい調整は後から hermes setup agent で行えます。

Telegram 連携

Messaging Platforms で Telegram を有効にしました。

ボット作成方法は 2 つ提示されます。

  1. Automatic(推奨) — QR コードをスキャンして自動作成
  2. Manual — @BotFather で自分でボットを作り、トークンを貼り付け

Automatic(推奨)を選びました。QR コードをスキャンすると Telegram が開き、ボット名などを入力する流れです。

ここでひとつ反省点。ボットの名前をその場で考えていたら、QR コード連携がタイムアウト してしまいました。事前に決めておけばよかったです。自動で Manual 方式に切り替えられましたが、@BotFather から取得したトークンを入力して完了しました。

結局、ボット名は Metis にしました。ギリシャ神話では知恵と参謀の女神で、問いかけに答え、状況を整理し、次の一手を助言する存在です。AI エージェントの役割とも重なる部分が多いと思ったのが由来です。

セキュリティ設定として、Allowed user IDs に自分の Telegram ユーザー ID を指定しました。@userinfobot にメッセージを送ると数値 ID が返ってくるので、それを入力します。空欄にすると誰でもボットを使える状態になるため、必ず制限をかけることをおすすめします。

Home Channel(cron 結果や通知の配信先)も、同じユーザー ID を指定しました。

オプション機能の設定

Setup Wizard の後半では、ツール系のプロバイダーも選べます。今回の選択は次のとおりです。

機能選択理由
Browser AutomationLocal Browser(Headless Chromium)無料・API キー不要
Image GenerationSkip当面使う予定がない
Text-to-SpeechMicrosoft Edge TTS無料・品質も十分
Web Search & ExtractSkip無料の DuckDuckGo スキルで足りる

Chromium はインストール済みと表示され、追加設定なしで Local Browser が使える状態になりました。

バックグラウンドで常時稼働させる

Telegram から Hermes Agent とやり取りするには、gateway が常時起動している必要 があります。

systemd サービスとして gateway を登録

Setup Wizard の途中で gateway の systemd サービス登録を求められます。選択肢は 3 つです。

  1. User service(sudo 不要、ログアウト後に止まる可能性あり)
  2. System service(起動時に自動開始、sudo が必要)
  3. Skip

VPS で 24 時間稼働させたいので 2. System service を選びました。ただし、Wizard 内からは sudo 権限の関係でサービス作成に失敗する場合があります。その場合はセットアップ完了後に手動で実行します。

Terminal window
sudo hermes gateway install --system --run-as-user hermes
sudo hermes gateway start --system

セットアップ完了後の確認

インストールが完了すると、設定ファイルは ~/.hermes/ 以下にまとまります。

ファイル / ディレクトリ内容
~/.hermes/config.yamlエージェント設定
~/.hermes/.envAPI キーなどのシークレット
~/.hermes/cron/cron ジョブ
~/.hermes/sessions/セッションデータ
~/.hermes/logs/ログ

動作確認用のコマンドは次のとおりです。

Terminal window
hermes doctor # 設定の問題がないか確認
tailscale status # VPS が Tailscale 上に見えるか確認

Telegram 上で作成したボットにメッセージを送り、応答が返ってくればセットアップ完了です。

最初の利用例

動作確認が取れたら、まずはシンプルな指示から試してみるのがおすすめです。例えば、Telegram ボットに次のようなメッセージを送ります。

こんにちは、自己紹介をしてください

Hermes Agent は Telegram 経由で応答を返してくれます。Web 検索や URL の要約、VPS 上でのターミナル操作など、Hermes Agent が持つツールを使った指示も同じ要領で試せます。

つまずいたところと対処

systemd サービスのインストール失敗

Wizard 内で System service を選んでも、hermes ユーザーからは sudo でサービスを作れないため失敗することがあります。表示される指示どおり、セットアップ後に sudo hermes gateway install --system --run-as-user hermes を実行すれば解決します。

Hetzner のサーバー在庫

CX23 が希望リージョンで選べないことがあります。Cost-Optimized 系は人気プランなので、別リージョン(例: Helsinki)や近いスペックのプランを検討してください。

カーネル更新後の再起動

apt upgrade 後にカーネル更新の通知が出ても、自動再起動はされません。作業の区切りで手動 reboot しておくと、以降の作業が安心です。

まとめ

Hetzner VPS(CX23)上に Hermes Agent を載せ、Tailscale で SSH を閉じ込め、Telegram から 24 時間アクセスできる環境ができました。

  • Hetzner は 支払い通貨を EUR にしておく のがコスト面で有利
  • Tailscale 経由のみ SSH を許可 すれば、パブリック IP への brute force リスクを下げられる
  • Hermes Agent の Setup Wizard は項目が多いが、Full setup なら OpenRouter や Telegram を自分好みに構成できる
  • gateway を systemd の System service に登録すれば、再起動後も自動で立ち上がる

次のステップとしては、cron ジョブで定期タスクを回したり、モデルを用途に応じて切り替えたり、Web Search プロバイダーを追加したりと、運用しながら設定を足していく予定です。

参考文献

imaikosuke

imaikosuke

Tokyo-based software engineer. Writing about tech and daily learnings.

@imaikosuke_