SSHで外部からRaspberryPiのサーバーに入り、内部LAN内にある別のRaspberryPiを操作
外部から内部LANの特定のRaspberry Pi(以降、ラズパイA)にSSH接続し、そこを「踏み台」にして内部ネットワーク内にある別のRaspberry Pi(ラズパイB)にSSHログインすることで、問題なく操作できます。
この手法は「多段SSH(SSHの多段接続)」と呼ばれ、セキュリティを保ちつつネットワーク内部へ安全にアクセスする標準的な方法です。具体的な手順と実現方法は以下の通りです。
1. 接続の全体像
- ラズパイA(踏み台サーバー): 外部からSSHアクセスが可能なラズパイ(ルーターのポート開放や、VPN/トンネリングツールを利用)。
- ラズパイB(目的のラズパイ): 内部LANにのみ存在し、外部から直接は見えないラズパイ。
- クライアント: あなたが今操作しているPC(外出先や自宅外)。
2. 多段SSHのやり方
(コマンド一発で繋ぐ方法)
クライアントのPC(MacやLinuxなど)のターミナルから、以下のコマンドを実行することで、ラズパイAを経由してラズパイBに一発でログインできます。
bash
ssh -J ユーザー名A@ラズパイAのIPまたはドメイン ユーザー名B@ラズパイBのローカルIP
コードは注意してご使用ください。
【使用例】
- ラズパイAのアドレス:
192.168.1.100(外部向けグローバルIPやDDNS) - ラズパイAのユーザー名:
pi - ラズパイBのローカルIP:
192.168.1.50 - ラズパイBのユーザー名:
pi
bash
ssh -J pi@192.168.1.100 pi@192.168.1.50
※-Jオプション(ProxyJump)は、OpenSSH 7.3以降で利用可能です。
3. 事前準備・必須条件
この操作を行うためには、以下の条件をクリアしている必要があります。
- ラズパイAへの外部アクセス手段
外部からラズパイAに接続するための入り口が必要です。以下のいずれかの方法を設定します。- ルーターのポート開放(SSHの22番ポートなど)
- VPN(WireGuardやTailscaleなど)の使用
- リバースプロキシやトンネリングサービス(Ngrok や Cloudflare Tunnel など)の利用
- ラズパイAとラズパイBが同じネットワーク(LAN)内にあること
- ラズパイBのIPアドレスが固定されていること
DHCP(動的割り当て)の場合、IPアドレスが変わってしまうことがあるため、ラズパイBは固定IPにしておくと便利です。
4. 便利技:SSH設定ファイル(config)の活用
毎回長いコマンドを打つのが面倒な場合や、コマンドでの設定が複雑な場合は、クライアントPCの ~/.ssh/config ファイルに接続設定を登録しておくことで、短いコマンドでアクセスできるようになります。
設定ファイルの記述例:
text
# 踏み台(ラズパイA)の設定
Host raspberryA
HostName 192.168.1.100 # 外部からアクセスできるアドレス
User pi
# 目的のサーバー(ラズパイB)の設定
Host raspberryB
HostName 192.168.1.50 # 内部LAN内でのラズパイBのIP
User pi
ProxyJump raspberryA
この設定をしておくと、PCのターミナルで ssh raspberryB と入力するだけで、自動的にラズパイAを経由してラズパイBにログインできます。
MobaXermで具体的に接続する方法
MobaXtermを使用する場合、先ほど解説した config テキストファイルを手動で書く必要はありません。グラフィカルな設定画面(GUI)に入力するだけで、自動的に多段SSH(MobaXterm内では「SSH Gateway」と呼びます)が構成されます。
具体的な設定手順を3ステップで詳しく解説します。
ステップ1:踏み台(ラズパイA)のセッションを作成する
まず、外部からアクセスできるラズパイAへの接続設定を作ります。
- MobaXtermを起動し、左上の [Session] ボタンをクリックします。
- セッションの種類で [SSH] を選択します。
- Basic SSH settings を入力します。
- Remote host: ラズパイAの外部IPアドレス、またはドメイン名
- Specify username: チェックを入れて、ラズパイAのユーザー名(例:
pi)を入力 - Port: ラズパイAのSSHポート(通常は
22)
- 一番下の [OK] を押して一度保存します(これでラズパイA単体の接続が左側のリストに登録されます)。
ステップ2:目的のサーバー(ラズパイB)のセッションを作成する
次に、本命である内部LANのラズパイBへの接続設定を作ります。ここが多段SSHの肝になります。
- 再度、左上の [Session] ボタン ➔ [SSH] をクリックします。
- Basic SSH settings に「ラズパイB」の情報を入力します。
- Remote host: ラズパイBの内部LANでのIPアドレス(例:
192.168.1.50) - Specify username: チェックを入れて、ラズパイBのユーザー名
- Port:
22
- Remote host: ラズパイBの内部LANでのIPアドレス(例:
ステップ3:踏み台(Gateway)の設定を組み込む
ラズパイBの画面を開いたまま、少し下にあるタブを操作します。
- 中央にある [Network settings] タブをクリックします。
- 中ほどにある [SSH gateway (jump host)] ボタンをクリックします。
- ポップアップ窓(SSH gateway configuration)が表示されるので、ここにラズパイA(踏み台)の情報を入力します。
- Gateway host: ラズパイAの外部IPアドレス、またはドメイン名
- Username: ラズパイAのユーザー名
- Port: ラズパイAのSSHポート(通常は
22)
- 入力できたら [OK] を押してポップアップを閉じます。
- 元のセッション画面の下部にある [Bookmark settings] タブを開き、Session name を「RaspberryPi-B (経由)」など分かりやすい名前に変更します。
- 最後に右下の [OK] ボタンを押して保存します。
接続のテスト
設定が完了すると、MobaXtermの左側の「User sessions」リストに、今作成したラズパイBのセッション(あだ名)が表示されます。
これをダブルクリックすると、MobaXtermが自動的に「ラズパイAに接続(認証)➔ そのトンネルを通ってラズパイBに接続」という処理を裏で行ってくれます。
画面の指示に従ってそれぞれのパスワードを入力(または鍵を選択)すれば、外部からLAN内のラズパイBの操作画面に一発で到達できます。