「社内LinuxサーバーのローカルLLMをリモートワーク中に使いたいが、ポートを開放するのはリスクがある」
そんな悩みを抱えるLinuxエンジニアや情シス担当者は多いはずです。この記事では、SSHポートフォワーディングを使ってOllamaのAPIをリモートから安全に呼び出す手順を解説します。Nginxリバースプロキシとは異なり、サーバー側に新たなポートを公開せず、既存のSSH接続をトンネルとして使うだけで外出先からローカルLLMが使えるようになります。VPSや社内サーバーへのSSHアクセスさえ確保されていれば、追加のミドルウェアなしに今日から実現できます。
この記事のポイント
・ssh -L 11434:127.0.0.1:11434 でOllamaのAPIをローカルに転送できる
・~/.ssh/config に LocalForward を書けば短いコマンドで常用設定になる
・ServerAliveInterval でキープアライブを設定し長時間推論中の切断を防ぐ
・autossh を使うと接続断時の自動再接続まで自動化できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
SSHポートフォワーディングとOllamaの組み合わせを使う理由
Ollamaは起動時にデフォルトで127.0.0.1:11434 にバインドします。ローカルホストのみへのバインドは「意図しない外部公開」を防ぐ安全な設計ですが、その分、リモートからAPIを呼び出すには何らかの中継手段が必要です。リモートアクセスの手段として代表的な選択肢が2つあります。1つはNginxなどのリバースプロキシを使って11434番ポートをHTTPSで外部公開する方法、もう1つがSSHポートフォワーディングでトンネルを張る方法です。前者はチームメンバー全員に常時APIを提供する用途に向いています。後者は自分一人が使う、あるいはテスト目的で一時的に接続したいという場合に適しています。
SSHトンネルの最大の利点は「サーバー側に新たなファイアウォールの穴あけが不要」なことです。11434番ポートを外部に開放しないため、攻撃面を最小に保てます。接続中だけトンネルが生き、切断すると自動的に閉じる点も管理のしやすさにつながります。OllamaとUbuntu Serverのセットアップがまだの方は、Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイドで基本構成を先に確認してください。
Ollamaのデフォルトネットワーク設定を確認する
SSHトンネルを張る前に、サーバー上のOllamaが正しくローカルホストにバインドされていることを確認します。この確認を飛ばすと、トンネルを正しく設定してもAPIが意図せず外部からアクセス可能な状態になっていることがあります。手順1: バインドアドレスを確認する
サーバーにSSHでログインし、以下のコマンドを実行します。
# Ollamaのリスニングアドレスを確認する $ ss -tlnp | grep 11434 # 期待する出力(ローカルバインドの状態) LISTEN 0 4096 127.0.0.1:11434 0.0.0.0:* users:(("ollama",pid=1234,fd=3))
127.0.0.1:11434 と表示されていれば、外部からは直接到達できない安全な状態です。もし 0.0.0.0:11434 と表示されている場合は全インターフェースに公開されています。その場合は後述するsystemd設定で OLLAMA_HOST=127.0.0.1:11434 を明示してください。手順2: systemdサービスの環境変数を確認する
Ollamaをsystemdサービスとして動かしている場合、
OLLAMA_HOST 環境変数でバインドアドレスを制御します。
# Ollamaのsystemd設定を確認する $ sudo systemctl cat ollama | grep -i "OLLAMA_HOST\|Environment" # 設定されていない場合は以下でoverride.confに追記する $ sudo systemctl edit ollama # [Service] # Environment="OLLAMA_HOST=127.0.0.1:11434"
sudo systemctl daemon-reload && sudo systemctl restart ollama で反映します。
SSHローカルフォワーディングでOllama APIをPC手元に転送する
サーバー側の設定確認ができたら、手元のPCからSSHトンネルを張ります。手順1: 基本的なSSHポートフォワーディングコマンドを実行する
手元のPCでターミナルを開き、以下のコマンドを実行します。
user@your-server-ip の部分は実際のSSHユーザー名とサーバーIPに置き換えてください。
# ローカルの11434番ポートをリモートのOllama APIへトンネリングする $ ssh -L 11434:127.0.0.1:11434 user@your-server-ip -N # -L ローカルポート:転送先ホスト:転送先ポート の形式で指定する # -N コマンド実行なしでトンネルだけを張るオプション
手順2: 別ターミナルからOllamaを動作確認する
トンネルが張られている状態で、手元のPCからlocalhost:11434へリクエストを送ります。
# トンネル越しにOllamaのモデル一覧を取得する $ curl http://localhost:11434/api/tags # トンネル越しにLlama3.3へプロンプトを送る(ストリームなし) $ curl http://localhost:11434/api/generate \ -d '{"model":"llama3.3:70b-instruct-q4_0","prompt":"SSHポートフォワーディングを100字で説明してください","stream":false}' \ | python3 -m json.tool
~/.ssh/configで接続を自動化・常用設定にする
毎回ssh -L 11434:127.0.0.1:11434 user@your-server-ip -N と打つのは手間です。~/.ssh/config に設定を書いておくと、短いエイリアスで接続できるようになります。手順1: ~/.ssh/configにホスト設定を追記する
手元のPCで
~/.ssh/config をエディタで開き、以下を追加します。ファイルが存在しない場合は新規作成します。
# ~/.ssh/config に追記する内容 Host ollama-server HostName your-server-ip User user Port 22 IdentityFile ~/.ssh/id_rsa LocalForward 11434 127.0.0.1:11434 ServerAliveInterval 60 ServerAliveCountMax 3 ExitOnForwardFailure yes
ServerAliveInterval 60 と ServerAliveCountMax 3 は、アイドル状態でも接続を維持するキープアライブ設定です。Ollamaで大きなモデルを動かしていると推論に数分かかることがあり、その間にトンネルが切断されるトラブルを防ぎます。ExitOnForwardFailure yes はポート転送に失敗した際にSSHが即座に終了するオプションで、ハング状態を防ぎます。手順2: 設定後の接続コマンドを確認する
# エイリアスで接続(フォアグラウンドでトンネルのみ起動) $ ssh -N ollama-server # バックグラウンドで起動する場合は -f を追加する $ ssh -fN ollama-server # バックグラウンドプロセスを停止する $ pkill -f "ssh -fN ollama-server"
ps aux | grep ssh でプロセスが生きていることを確認できます。
Open WebUIとOllamaをまとめてトンネリングする
Open WebUI(通常3000番ポートで動作)も合わせてリモートから使いたい場合、フォワーディングを複数設定します。OllamaとOpen WebUIを同時にトンネリングすることで、ChatGPT風のブラウザUIも手元のPCからそのまま利用できます。手順1: 複数ポートを同時にトンネリングする
# OllamaとOpen WebUIを同時にトンネリングする(コマンドで直接指定する場合) $ ssh -L 11434:127.0.0.1:11434 -L 3000:127.0.0.1:3000 user@your-server-ip -N
LocalForward 行を複数追加します。
# ~/.ssh/config に複数のポート転送を追記する Host ollama-server HostName your-server-ip User user IdentityFile ~/.ssh/id_rsa LocalForward 11434 127.0.0.1:11434 LocalForward 3000 127.0.0.1:3000 ServerAliveInterval 60 ServerAliveCountMax 3
http://localhost:3000 を開くとOpen WebUIが表示されます。Open WebUI上での操作はすべてSSHトンネル経由でサーバーのOllamaへ届くため、機密データを外部に出さずにブラウザUIを使えます。社内でのChatGPT代替として導入を検討している方は、社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢も参考にしてください。手順2: 接続後の動作確認
# OllamaのAPIが応答するか確認する $ curl http://localhost:11434/api/tags | python3 -m json.tool # Open WebUIのHTTPレスポンスを確認する $ curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 # 200 が返れば接続成功
SSHの認証セキュリティを強化する
SSHトンネルの安全性はSSH接続そのものの堅牢さに依存します。Ollamaサーバーへの不正アクセスを防ぐため、SSH認証設定を見直します。手順1: 公開鍵認証を有効にしてパスワード認証を無効にする
パスワード認証が有効なままだとブルートフォース攻撃にさらされます。公開鍵認証に一本化します。
# 公開鍵をサーバーへコピーする(手元のPCで実行) $ ssh-copy-id user@your-server-ip # サーバー側のsshd_configでパスワード認証を無効にする $ sudo grep -E "^(PasswordAuthentication|PubkeyAuthentication|PermitRootLogin)" /etc/ssh/sshd_config PubkeyAuthentication yes PasswordAuthentication no PermitRootLogin no # 設定を反映する $ sudo systemctl restart sshd
手順2: fail2banでブルートフォース対策を強化する
パスワード認証を無効にしても、ログイン試行自体は来続けます。fail2banを入れておくと繰り返し失敗したIPを自動でbanできます。
# fail2banをインストールして有効にする $ sudo apt install fail2ban $ sudo systemctl enable --now fail2ban # SSH保護の状態を確認する $ sudo fail2ban-client status sshd
よくあるSSH接続トラブルと対処法
トラブル1: 「Address already in use」エラーが出るローカルポート11434が既に使用中です。手元のPCにもOllamaをインストールしている場合によく起きます。
# 手元のOllamaサービスを停止してから再接続する $ sudo systemctl stop ollama # Linux の場合 # または別のローカルポートを使う(11435番に転送する例) $ ssh -L 11435:127.0.0.1:11434 user@your-server-ip -N # APIアクセス時は localhost:11435 を指定する
まずサーバー上でOllamaが動いているか確認します。
# サーバー側でOllamaの状態を確認する(サーバー上のターミナルで実行) $ sudo systemctl status ollama $ curl http://127.0.0.1:11434/api/tags # ローカル転送が機能しているか手元で確認する $ ss -tlnp | grep 11434 # LISTEN状態になっていればトンネルは確立している
ssh -v -N ollama-server でデバッグ出力を確認します。debug1: Local forwarding listening on 127.0.0.1 port 11434 の行が出ていれば転送は設定されています。トラブル3: トンネルが途中で切断される
長時間の推論中に接続が切れる場合、autosshを使うと自動再接続が可能になります。
# autosshをインストールする $ sudo apt install autossh # 自動再接続つきでトンネルをバックグラウンド起動する $ autossh -M 0 -fN \ -o "ServerAliveInterval=60" \ -o "ServerAliveCountMax=3" \ -L 11434:127.0.0.1:11434 \ user@your-server-ip # 起動確認 $ ps aux | grep autossh
-M 0 は監視ポートを無効にして ServerAliveInterval に接続確認を任せるオプションです。autosshをsystemdサービスとして登録すれば、サーバー再起動後も自動的にトンネルが復旧します。
まとめ
SSHポートフォワーディングは、Nginxを立てるほどではない個人利用や一時的なリモートアクセスに最適な方法です。サーバー側でポートを新たに開放せず、既存のSSH接続をそのまま流用できるため、セキュリティリスクを最小に保ちながらOllamaをリモートから使えます。本記事で解説した手順の要点をまとめます。
| 設定・操作 | コマンド・設定値 |
|---|---|
| 基本トンネル起動 | ssh -L 11434:127.0.0.1:11434 user@server -N |
| バックグラウンド起動 | ssh -fN ollama-server(config設定後) |
| API動作確認 | curl http://localhost:11434/api/tags |
| キープアライブ設定 | ServerAliveInterval 60 / ServerAliveCountMax 3(~/.ssh/config) |
| 自動再接続 | autossh -M 0 -fN -L 11434:127.0.0.1:11434 user@server |
| パスワード認証無効化 | PasswordAuthentication no(/etc/ssh/sshd_config) |
| 複数ポート同時転送 | ssh -L 11434:127.0.0.1:11434 -L 3000:127.0.0.1:3000 user@server -N |
ローカルLLMのリモートアクセスから本番運用まで2日間で体験する
SSHトンネルで動かしてみたら、次は本番クラスター構成やRAGパイプラインまで発展させたくなる方が多いはずです。実機GPU環境で手を動かしながら習得したい方向けに、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。
・Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
・社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
・ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:OllamaのAPIをufwで保護する方法|Linuxファイアウォールで社内ネットワーク限定公開とポート制御を設定する手順
- この記事の属するカテゴリ:ローカルLLMへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます