ちょっとした作業をする際に知ったのだが、2017年頃にリリースされているOpenSSH v7.6以降ではReverse Dynamic Forwardingというものが追加されていたらしい。

-Dオプションで指定するDynamic Forwardingの逆で、sshサーバ側からsshクライアント側にsocksの口を開くというものらしい。 こんなの追加されてたんだ…(知らなかった)。

オプションの指定は簡単で、-Rで対象のポートだけ指定すると良いらしい(Reverse port forwardingとまじりそうだな…)。

ssh -R 9999 server

確認の際は、sshサーバ側で以下のようにcurlを実行してやればいい。 Dynamic forwardingに使っているポートをproxyとして指定する。

curl --socks5-hostname 127.0.0.1:9999 http://httpbin.org/ip

あとは、レスポンスのグローバルIPがsshクライアント側のものであればOK。

地味に便利な機能だ(´・ω・`)。 自分の作ってるGoのsshライブラリにも追加しようかな。