質問: こちらのページを参照し、sshポートフォワーディングについてはおおよそ理解しました。 グローバルアドレスをもった、EC2インスタンス(仮にexample.com:9876)に対し、アクセスを行った際に、 localで起動しているサーバー(localhost:80)に転送をさせたいです。 ``` ※ 実際にはまだドメインをもっていないため EC2作成時にできるパブリック DNSであるこちらを使用しております。 ec2-.ap-northeast-1.compute.amazonaws.com ``` ただ、今回は、example.com/sample/hoge というURLに対してGETのリクエストが来たときに、localhost/sample/hoge のURLに転送をしてほしいです。 `ssh -R 80:example.com:9876 username@example.com` これらをふまえてわからない点が2点御座います。 1) 上記コマンドでsshしたあと、curlした際に、port 9876: 接続を拒否されましたと表示されます。 尚、該当のEC2のセキュリティグループでは、ポートを開放しております。 `curl example.com:9876 -X GET` ``` カスタム TCP ルール(タイプ) TCP(プロトコル) 9876(ポート) 0.0.0.0/0(送信元) ``` 2) また、質問1では、パス指定をしておりませんが、前述のlocalの指定のパスに転送するという方法についてがわかりません。 よろしくお願いします。
回答: (1)については、コメントにも書いてありますが、`ssh -R 9876:localhost:80 username@example.com`が正しいコマンドです。これでexample.com:9879へのアクセスがsshを実行しているPCのポート80に転送されます。 詳しくはこの記事を参照してください。 なお、example.comのサーバ(EC2インスタンス)のsshd_config(`/etc/ssh/sshd_config`)に`GatewayPorts yes`を書いておく必要があると思います。ssh_configと間違えないように気を付けてください。 (2)については何もすることはありません。sshが転送するのはトランスポート層の話で、HTTPリクエストのパスの部分はその上の層のデータなので、そのまま転送されるはずです。