I was trying to create a Slack app. In order to let Slack send REST requests to my dev environment, eg. http://localhost:9000, I searched a bit and saw ngrok. Ngrok is very handy for this kind of setup:
Slack -> xyz.ngrok.io -> localhost
However I just don’t want to install anything so I turned to Google and to my surprise SSH can exactly do this(for who knows how many years). I know I can forward a local port to a remote host to connect to a service behind firewall such as databases, this is my first attempt to forward a remote port to local so Slack API can contact my localhost.
Here’s a better article which explained how to do port forwarding in both directions with SSH.
In short, to forward a remote port to my localhost, I need to
1, update the sshd_config on remote host and have GatewayPorts enabled and then restart SSH service
2, in a local terminal, run the following command replacing my.remote.host with your server’s domain or IP.
ssh -nNT -R 9800:localhost:9000 my.remote.host
Then test it with
curl -i http://my.remote.host:9800
The request should be forwarded to your localhost:9000.