OllamaをSSHポートフォワーディングでリモートアクセスする方法|VPSや社内サーバーのローカルLLMを外出先から安全に操作する

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)ローカルLLM > OllamaをSSHポートフォワーディングでリモートアクセスする方法|VPSや社内サーバーのローカルLLMを外出先から安全に操作する
「OllamaをVPSに構築したのに、外出先からAPIが呼び出せない」
「社内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 を使うと接続断時の自動再接続まで自動化できる


OllamaをSSHポートフォワーディングでリモートアクセスする方法|VPSや社内サーバーのローカルLLMを外出先から安全に操作する

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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 コマンド実行なしでトンネルだけを張るオプション

このコマンドを実行したまま、別のターミナルウィンドウを開いてAPIを呼び出します。

手順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

手元のlocalhost:11434へのリクエストがSSHトンネルを経由してサーバー上のOllamaに届きます。アプリ側からはローカルにOllamaが存在するように見えるため、既存のPythonコードやスクリプトをそのまま使えます。モデルの選び方を参考にして用途に合ったモデルを事前にサーバーへpullしておくと、接続直後からスムーズに使えます。

~/.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 60ServerAliveCountMax 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

~/.ssh/config に記述する場合は 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

【注意】必ず別のSSHセッションを開いたまま作業を進め、新しいセッションで公開鍵認証でログインできることを確認してから既存セッションを閉じます。ロックアウトに備えて、コンソールアクセス手段(VPSのWebコンソール等)を確保しておくと安全です。

手順2: fail2banでブルートフォース対策を強化する

パスワード認証を無効にしても、ログイン試行自体は来続けます。fail2banを入れておくと繰り返し失敗したIPを自動でbanできます。

# fail2banをインストールして有効にする $ sudo apt install fail2ban $ sudo systemctl enable --now fail2ban # SSH保護の状態を確認する $ sudo fail2ban-client status sshd

現役インフラエンジニアの話だと、公開鍵認証 + fail2ban の組み合わせだけで大半の自動攻撃は防げるとのことです。20年以上のLinux運用現場でもこの2点はほぼ必ず入れる基本構成です。

よくある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 を指定する

トラブル2: トンネル接続後もAPIが応答しない

まずサーバー上で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
チーム全体への常時提供が必要になった段階では、Ollamaの本格構築ガイドを参照しながらNginxリバースプロキシへの移行を検討してください。まずは個人利用でSSHトンネルを使い始め、利用者が増えたタイミングで構成を切り替えるのが現実的な進め方です。

ローカルLLMのリモートアクセスから本番運用まで2日間で体験する

SSHトンネルで動かしてみたら、次は本番クラスター構成やRAGパイプラインまで発展させたくなる方が多いはずです。実機GPU環境で手を動かしながら習得したい方向けに、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。

>> ローカルAIマスターセミナーの詳細を確認する
ローカルLLMの構築・運用に関する関連記事もあわせて参考にしてください。

Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。