FRELY / BLOG

SSH鍵を手渡さずに、AIにサーバー運用を任せる

ログの閲覧、設定ファイルの編集、サービスの再起動をAIアシスタントに任せる人が増えています。素直な方法は、自分のコンピューター上でコマンドを実行できるAIを動かし、そのAIにsshでサーバーへ入ってもらうことです。

これでも機能します。ただ、ひとつ立ち止まって考えておきたい点があります。AIにsshを実行させるということは、~/.sshフォルダー丸ごとをAIに渡しているということです。

ノートPC経由の場合:思っているより多くを渡すことになる

あなたのコンピューター上でAIにssh prodを実行させるには、AIは~/.ssh内の設定ファイルと秘密鍵を読める必要があります。ほとんどの権限管理は、フォルダーが読み取り可能かどうかしか判断できません。「このサーバーだけ」といった限定はできません。つまり、次のとおりです。

  • このサーバー用の鍵だけでなく、すべての秘密鍵を読めてしまいます。
  • AIのコマンドがネットワークに到達できる限り、鍵はコンピューターの外へ持ち出せてしまいます。漏洩した鍵は有効なままです。後からAIのアクセスを止めても鍵は戻ってこず、全サーバーから公開鍵を削除しなければなりません。
  • sshでログインしてしまえば、AIがサーバー上で何をできるかはその鍵の背後にあるアカウント次第です。rootなら、AIにもroot権限があります。

サーバーのログに記録されるのは「あなたのノートPCがあなたの鍵でログインした」という事実だけです。あなたのコマンドとAIのコマンドを区別することはできません。

逆の発想:サーバー側から接続させる

サーバーの扉を開ける鍵をAIに渡す代わりに、小さなプログラムをサーバーにインストールします。サーバーがあなたのAIアカウントへ外向きに接続し、AIがそこで何をしてよいかはあなたが決めます。

Frelyでは次のようになります。

  1. FrelyのウェブサイトでMy Devices → Add a computer(マイデバイス → コンピューターを追加)を開き、一回限りのインストールコマンドを作成します。それをサーバー上で貼り付けて実行します。トークンは1回だけ有効で、15分で失効し、サーバーには保存されません。
  2. サーバーがFrelyへ外向きに接続します。ポートは一切開けません。
  3. ChatGPT、Claude、CodexでFrelyMCPを接続すれば、AIはそのサーバー上でファイルの読み取りやコマンドの実行ができるようになります。

これによって変わること:

  • 長期有効の鍵はAIに渡りません。 サーバーには固有のデバイスIDが割り当てられ、AIが実行するコマンドからはそれを読めません。
  • コマンドはデフォルトでサンドボックス内で実行されます。 書き込みできるのはあなたが指定したフォルダーと一時フォルダーだけで、~/.sshや~/.awsといった認証情報フォルダーは読み取れません。サーバーでサンドボックスが実行できない場合は、無防備なまま実行するのではなく、コマンドが拒否されます。
  • 追加のアクセスにはあなたの承認が必要です。 AIが要求を出し、あなたはFrelyのウェブサイトでパスキーまたは認証コードを使って、許可するかどうか、どの期間許可するかを決めます。選択肢は1コマンドのみ、12時間、デバイス認証の終了までです。AIが自分の要求を自分で承認することはできません。
  • いつでも取り消せて、すぐに反映されます。 すべての呼び出しで再度権限が確認されるため、取り消した後の最初のコマンドは拒否されます。

安全性を高める4つの習慣

サーバー上での境界線は「Frelyが動作するシステムユーザー+サンドボックス」です。以下の選択がその強度を決めます。

  1. rootではなく専用ユーザーとしてインストールする。 たとえばfrely-opsを作成し、アプリのフォルダーだけにアクセス権を与えます。サンドボックスは書き込みを制限しますが、ユーザーが読める範囲は制限しないため、ユーザーの権限は小さいほどよいのです。rootなしでシステムログを読むには、admグループとsystemd-journalグループにユーザーを追加します。
  2. サンドボックスが機能しているか確認する。 Linuxではbubblewrap、socat、ripgrepをインストールしてください。frely doctorでサンドボックスが利用可能かどうか分かります。CentOS 7のような古いシステムでは実行できないため、その場合は常時許可にするのではなく、「サンドボックスなしで実行」を期間限定で承認してください。
  3. 必要なフォルダーだけを共有する。 ホームフォルダー全体を共有する代わりにFRELY_WORKSPACE=/srv/myappを設定し、デバイス認証の期間は短く保ちます。
  4. dockerグループの意味を理解する。 dockerグループに属するユーザーはdocker logsを直接読めます。便利ですが、この所属はroot並みの力を持ちます。

それでもsshで問題ない場合

AIがログの閲覧と、いくつかの読み取り専用コマンドの実行しかしないのであれば、次の条件を満たす限り、ノートPC経由でも許容できます。

  • このサーバー専用の鍵を別途作成し、サーバーのauthorized_keysでfrom=とrestrictによる制限をかけたうえで、権限の小さいユーザーとしてログインさせること
  • 同じ~/.sshに他の強力な鍵が置かれていないこと
  • アクセスは目の前のタスクの間だけ許可し、何日も放置しないこと

まとめ

AIにサーバーを運用させるとき、重要なのはAIがどれほど賢いかよりも、何を手にしているかです。AIに鍵を渡すのではなく、サーバー側から接続させ、何を許すかをあなたが承認するようにしましょう。

Frely CLIを始める

All posts