Site Tools


wiki:ssh-port-forwarding

Table of Contents

SSH Port Forwarding

Port forwarding secures connections by tunneling local or remote ports through SSH. Useful for accessing services behind firewalls or across untrusted networks.

Local forward: traffic from your localhost goes through SSH to a service on the remote side.

$ ssh -L 8000:localhost:3000 user@host

Now localhost:8000 connects through host to its localhost:3000. Useful for accessing a database or web service on a remote server.

Bind to all interfaces (less secure):

$ ssh -L 0.0.0.0:8000:localhost:3000 user@host

Remote forward: traffic from the remote host comes back through SSH to your machine.

$ ssh -R 8000:localhost:3000 user@host

Now host:8000 connects back through SSH to your localhost:3000. Useful for exposing a local service to a remote network.

SOCKS proxy: use SSH as a proxy for all traffic.

$ ssh -D 8000 user@host

Clients can configure localhost:8000 as a SOCKS5 proxy. Browser, curl, or other apps route traffic through the tunnel.

Persist tunnels in ~/.ssh/config:

Host work
    HostName work.example.com
    LocalForward 8000 localhost:3000
    RemoteForward 8000 localhost:3000

Common options:

-L [bind_address:]port:remote_host:remote_port
-R [bind_address:]port:local_host:local_port
-D [bind_address:]port
-N             don't execute commands (just forward)
-f             run in background

Keep tunnel alive in background: ssh -NfL 8000:localhost:3000 user@host

wiki/ssh-port-forwarding.md · Last modified: by 127.0.0.1