Net::SFTP::Foreign の OpenSSH バックエンドでは、プロキシ経由のルーティングを SSH オプションとして表現できます。モジュールに文書化されている more パラメータは、コマンド引数の配列を受け取ります:

use Net::SFTP::Foreign;

my $sftp = Net::SFTP::Foreign->new(
    'files.example.net',
    user => 'operator',
    more => [
        '-o',
        'ProxyCommand=nc -X 5 -x proxy.example.net:1080 %h %p',
    ],
);

die $sftp->error if $sftp->error;

これは OpenBSD 互換の nc ヘルパーが既にあることを前提とします。OpenSSH がそれをローカルで実行し、SFTP の宛先への SOCKS5 接続を確立します。プレースホルダーは SSH が選んだホストとポートを渡します。許可された公開中継を経由して公開 SFTP サーバーに到達するには、ヘルパー用に SOCKS5 プロキシ一覧からアカウント不要のエンドポイントを選びます。そのエンドポイントは、この SSH の宛先とポートを許可している必要があります。

引数の区切りが重要です。-o が 1 つの引数で、ProxyCommand の代入全体がその次の引数になります。Net::SFTP::Foreign の more パラメータは、複数の SSH 引数を含む任意の文字列を自動的に配列として扱うわけではありません。

アプリケーションは ProxyCommand を通常の SSH Host 設定に置いたまま、そのホスト別名を Net::SFTP::Foreign に渡すこともできます。OpenSSH バックエンドの設定はどちらの形でも使えます。Plink のような別のバックエンドには独自のオプション構文があります。

関連記事