以前は非常にハードルの高かった(例:以前の方法)SMB over SSHだが、最近のwindows11では445番ポート以外にSMB接続できるようになって、かなり簡単になったのでやり方をメモする。
大まかな構成
LoopBackアダプタのIPアドレスを踏み台にしたSSHポートフォワーディングでSSHサーバの先のwindowsのファイルサーバにアクセスするのが最終目標。
flowchart LR A[Windows SMBクライアント] --> B[Loop Backアダプタ] B --> C[SSHクライアント] C --> D[SSHサーバ] D --> E[Windows SMBサーバ]
前準備:Loopbackデバイスの追加
デバイスドライバの操作→「レガシーハードウェアの追加」を選ぶ


一覧から「ネットワークアダプター」選択して

Microsftのloopbackアダプタを選ぶ

IPアドレスの設定
SSHでポートフォワードする時に、今つくったloopbackアドレスで待ち受ける。そのためのIPアドレスを適当に設定する。まず、コントロール パネル→ネットワークとインターネット→ネットワーク接続を開いて、loopbackアダプタのプロパティを開く

IPv4もしくはIPv6以外は使う事無いと思うので、無効にしておいてよい。IPアドレスを設定する。日常使いでぶつからなそうなIPを設定しておく必要がある。適当に192.168.199.xx等を設定する。サブネットは衝突したときの影響を少なくするために255.255.255.255が良い。(異論は認める)

詳細設定から複数のIPアドレスを設定することも出来る。同時に使う接続先が複数有る場合、IPアドレスを分けて接続する必要がある点に注意が必要。ポートを分けるんじゃなくて、IPを分ける。

↑こんな感じでエクスプローラにはLoopbackアダプタのIPアドレスが見える事になる。
ちょっとわかる人は127.0.0.0/24あたりを設定したくなると思うがポートフォワードは正しくできるものの、windowsファイル共有はまとめて自ホストと見なしてエラーになるので注意。
SSHでポートフォワード
C:\Windows\System32\OpenSSH\ssh.exe -v -L 192.168.199.15:8445:192.168.1.15:445 -L 192.168.199.159:8445:192.168.1.159:445 SSHserver -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 -o ServerAliveCountMax=3
上のようなコマンドを適当なバッチファイルに記述すればよい。LoopbackアダプタのIPアドレスと、接続先ファイルサーバIPとsshサーバの名前は適宜書き換えが必要。オプションは意味以下の通り。
-v デバッグメッセージ表示
(port foward接続のたびにログを出してくれるのでsshまでは通ってるのが人目でわかるのでお勧め)
-L loopBackアダプタIP:待ち受けport:接続先サーバIP:445(SMBのポート番号)
SSHServer 接続先のSSHサーバ名
-NT コマンドラインターミナルは立ち上げない
-o ExitOnForwardFailure=yes 接続出来なかったら終了
-o ServerAliveInterval=30 30秒毎にサーバが生きてるかチェック(無通信自動切断対策)
-o ServerAliveCountMax=3 3回失敗したら諦めて終了
SMB接続
net use \\192.168.199.15\ /TCPPORT:8445
windowsが445は使ってしまっているのを回避して、8445ポートを使ってポートフォワーディングしているので、コマンドラインから上のように打って/TCPPORTオプションを付けてサーバに接続する必要がある。バッチファイルで実行するという手もあるが、ネットワークドライブとして割り当ててしまう方がより簡単。
net use Q: \\192.168.199.15\homes /TCPPORT:8445
Q:はマウント先フォルダ名、homesといった共有フォルダ名は省略できないので、サーバ内の特定共有フォルダしかドライブとしてマウントできない。ただし、Qドライブを使える状態なら\\192.168.199.15もエクスプローラで直接アクセスできるし、当然homes以外の共有フォルダにもアクセスできる。
余談
内部的には「IPアドレス」でファイルサーバ情報を管理していて、ファイルサーバ情報の属性としてTCPPORTがついてると理解するとすっきり理解出来る。net useコマンド叩くんかい!とか若干使いにくい所ものこってるが、以前のサービス起動順序を弄るのにくらべれば圧倒的に楽になったとは思う。