Windows 10標準のOpenSSHを使ったSSHポートフォワーディング(トンネリング)徹底解説
本記事では、Windows 10に標準搭載されているOpenSSHサーバーを利用して、SSHトンネル経由でポートを転送する方法を詳しく解説します。SSHポートフォワーディングを活用すれば、アプリケーションのポートをローカルコンピューターからリモートサーバーへ、あるいはその逆方向へトンネリング(転送)できます。かつてSSHトンネリングはLinux/Unix環境専用のものでしたが、現在ではWindows 10やWindows Server 2016以降でも利用可能になっています。ここでは、SSHトンネル(TCPポート22)経由でRDP接続を行う具体的な事例を紹介します。
SSHトンネリングは、ファイアウォールの内側にあるリモートコンピューターへ接続する必要がある場面で特に役立ちます。たとえば、SSHポート(TCP 22)のみが開放され、その他のポートはハードウェアファイアウォールやWindowsファイアウォールによってすべてブロックされているWindows Serverがあるとします。この状態でリモートデスクトップ(RDP)クライアントから接続したい場合、通常はRDP用のポート3389が閉じられているため接続は不可能に思えます。しかし、SSHトンネルを経由したポートフォワーディング技術を使えば、この問題を回避できます。
SSHトンネリングの代表的な活用シーンは以下の3つです。
- ローカルTCPフォワーディング: ローカル側のポートをリモートサーバーへ転送する方式
- リモートTCPフォワーディング: リモート側のポートをローカルコンピューターへ転送する方式
- 二重SSHトンネル: 専用のグローバルIPを持たないNAT環境下のコンピューター同士を、SSHサーバーを中継して接続する方式(OpenVPNが使えない場合の代替手段)
SSHトンネル経由でRDPアクセスする(ローカルTCPフォワーディング)
このモードでは、自分のコンピューター上にローカルTCPポートを作成し、そのポートへの接続をすべてSSHトンネル経由でリモートサーバーの指定ポートへ転送します。この例では、ローカルポート8888を作成し、そこへの接続をリモートWindowsマシンのRDPポート3389へ転送します。全体の接続イメージは以下の通りです。

Windows 10 1809およびWindows Server 2019以降にはOpenSSHクライアントが標準搭載されています。これを使ってSSHトンネルを作成するには、次のコマンドを実行します。
ssh -L 8888:192.168.1.90:3389 root@192.168.1.90
SSHトンネルをバックグラウンドで動作させたい場合は、-fオプションを追加してください。

SSHトンネル経由でリモートコンピューターのデスクトップに接続するには、RDPクライアント(mstsc.exe)から自分のコンピューターのローカルポート8888へ接続します。
127.0.0.1:8888

リモートコンピューターにログインすれば、安全なRDPセッションで作業できます(ファイアウォールでポート3389が閉じられたままである点に注意してください)。TCPViewなどのツールを使えば、RDP接続が実際にはローカルで動作しているSSHサーバーによって開始されていることを確認できます。

なお、暗号化されていないアプリケーション通信をフォワーディングした場合でも、公衆ネットワーク上では暗号化されて伝送されます。トラフィックはSSH接続の一端で暗号化され、もう一端で復号される仕組みです。
さらに、このモードではローカルネットワーク上の他のコンピューターも、直接接続が許可されていない場合(SSHもRDPも不可の場合)でもRDPサーバーへ接続できます。その際は、SSHトンネルが作成されたコンピューターのポート8888に対してRDPクライアントで接続します。
mstsc.exe /v 10.10.1.220:8888

リモートTCPフォワーディングでローカルPCへアクセスする
SSHトンネルにはもう一つの使い方があります。それがリモートTCPフォワーディングです。SSHトンネルを利用することで、リモートサーバーから自分のコンピューターのローカルポート、あるいはローカルネットワーク内の別のコンピューターのポートへアクセスできるようになります。たとえば、外部のサーバー(200.168.1.90)から、インターネットに公開していない社内サイトへアクセスしたいケースを考えてみましょう。リバースSSHトンネルを作成するには、次のコマンドを使用します。
ssh -R 8080:internalwww:80 user@200.168.1.90
リモートのSSHサーバーから社内サイト(internalwww)へアクセスするには、ブラウザーで次のアドレスを入力するだけです。https://localhost:8080
なお、すべてのWindowsバージョンでは、netsh interface portproxyコマンドを使用してポートフォワーディングのルールを作成することもできます。
また、SSHトンネルを組み合わせれば、多段のポートフォワーディングチェーンを構築することも可能です。SSHトンネリングの有効/無効を制御したい場合は、OpenSSHの設定ファイル(%programdata%\ssh\sshd_config)に以下のディレクティブを追加してください。
AllowStreamLocalForwarding yes AllowTcpForwarding remote
-
Windows 10 で SSH キーを生成する方法【標準搭載 OpenSSH を活用】
Windows 環境で SSH キーを生成するには、かつてはサードパーティ製ツールをインストールする必要があり、手順も複雑でした。しかし、Windows 10 April 2018 Update 以降は OpenSSH クライアントが標準で搭載されるようになったため、ssh-keygen コマンドだけで簡単に SSH キーを作成できるようになりました。この記事では、事前確認からキーの生成、実際の接続までの全手順をわかりやすく解説します。 事前準備:OpenSSH クライアントの確認と有効化 まず、お使いの PC に OpenSSH がインストールされていることを確認しましょう。以前のバージョ
-
Windows 10でSSHセキュアシェルを使う方法!おすすめクライアント5選を徹底解説
パソコンをリモートデスクトップに接続したり、ネットワーク経由でデータを共有したりするには、セキュアシェル(SSH)が必要です。この記事では、Windows 10でSSHセキュアシェルを使用する方法について詳しく解説します。 SSHセキュアシェルは、デバイスとインターネットを含む任意のネットワーク間の通信システムと考えることができます。通信が暗号化されているため安全であり、ハッカーやスパイウェア、アドウェア、マルウェアなどから、ユーザーがどのサイトや場所にアクセスしているか、どこからデータを受信しているかといった情報を守ることができます。 Linux系OSはWindowsよりも安全性が高いと言わ