Skip to main content

Auto-forward SSH ports

Project description

SSH Auto Port Forwarder

Automatically detect and forward ports from a remote SSH server to your local machine. Similar to VS Code's port forwarding feature, but fully automatic.

Features

  • Automatically discovers listening ports on the remote server
  • Shows process names for each forwarded port
  • Forwards ports to your local machine via SSH tunneling
  • Handles port conflicts by finding alternative local ports
  • Auto-detects new ports and starts forwarding
  • Auto-detects closed ports and stops forwarding
  • Terminal title shows tunnel count
  • Runs in the background with status updates
  • Reads connection details from your SSH config
  • Skips well-known ports (< 1000) by default

Installation

With uv (recommended):

uvx ssh-auto-forward hetzner

Install locally:

cd portforwards
uv sync

This installs the ssh-auto-forward command.

Local development:

make run ARGS=hetzner
make run ARGS="hetzner -v"

Usage

Basic usage - uses host from your SSH config:

ssh-auto-forward hetzner

Options:

-v, --verbose           Enable verbose logging
-i, --interval SECS     Scan interval in seconds (default: 5)
-p, --port-range MIN:MAX Local port range for remapping (default: 3000:10000)
-s, --skip PORTS        Comma-separated ports to skip (default: all ports < 1000)
-c, --config PATH       Path to SSH config file
--version               Show version and exit

Examples:

# Scan every 3 seconds
ssh-auto-forward hetzner -i 3

# Use specific port range
ssh-auto-forward hetzner -p 4000:9000

# Skip specific ports
ssh-auto-forward hetzner -s 22,80,443

# Verbose mode
ssh-auto-forward hetzner -v

How it works

  1. Connects to your remote server using your SSH config
  2. Runs ss -tlnp on the remote to find listening ports
  3. Creates SSH tunnels for each discovered port
  4. Continuously monitors for new/closed ports
  5. Handles port conflicts on your local machine

Status messages

✓ Connected!
✓ Forwarding port 2999 (python3)
✓ Forwarding port 7681 (ttyd)
✓ Forwarding remote port 19840 -> local port 3000 (node)
✗ Remote port 2999 is no longer listening, stopping tunnel

The terminal title also updates to show: ssh-auto-forward: hetzner (18 tunnels active)

Testing

Start a test server on your remote machine:

ssh hetzner "python3 -m http.server 9999 --bind 127.0.0.1 &"

Then run ssh-auto-forward hetzner and you should see:

✓ Forwarding remote port 9999 -> local port 3003 (python3)

Access it locally:

curl http://localhost:3003/

Stopping

Press Ctrl+C to stop the forwarder and close all tunnels.

Requirements

  • Python 3.10+
  • paramiko
  • Remote server must have ss or netstat command available

Tests

Unit tests (run locally, no SSH required):

make test
# or
uv run pytest tests/ -v

Integration tests (require SSH access):

SSH_AUTO_FORWARD_TEST_HOST=hetzner uv run pytest tests_integration/ -v

The integration tests:

  • Test that remote ports are forwarded to the same local port when available
  • Test that ports increment by 1 when the local port is busy
  • Test auto-detection of new ports
  • Test auto-cleanup when remote ports close

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ssh_auto_forward-0.0.2.tar.gz (21.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ssh_auto_forward-0.0.2-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file ssh_auto_forward-0.0.2.tar.gz.

File metadata

  • Download URL: ssh_auto_forward-0.0.2.tar.gz
  • Upload date:
  • Size: 21.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for ssh_auto_forward-0.0.2.tar.gz
Algorithm Hash digest
SHA256 55cd6f8373f6ab8eed262c1280089ab1923770874acad9cec1387d26e92f9579
MD5 40e4b1d7429826fdea3bb87cb4780183
BLAKE2b-256 f69ce75ca886298f64dfc78689f85199ca6271ec55487fcb25432971b1f310f0

See more details on using hashes here.

File details

Details for the file ssh_auto_forward-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for ssh_auto_forward-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9059b714e8f5db7938bbdaa96637491e8fc441c79c0c58226ac874301e291ddd
MD5 769b9481074b886009e0e592e64cc888
BLAKE2b-256 477e8bbb2ad525a8769c44bc05caf8fb04c64bd6b6ba21dc9dd596f741c2ab71

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page