Skip to main content

Automatically forward and manage ports from any remote machines.

Project description

PortProxy

TL;DR: Start and manage ssh tunnels just by browsing to easily-remembered URLs.

ssh -N -f -L 8888:localhost:8888 you@machine -> http://[portproxy]/machine1/8888.

Example Image of PortProxy

PortProxy is a simple service for forwarding ports dynamically upon request from machine names found in your ssh config file. Here's how it works. Say you have a config file in your ssh that looks like this:

Host machine1
    HostName machine1.internet.com
    User you

Host machine1
    HostName machine2.internet.com
    User you

You might want port 8888 from both machine1 and machine2 (e.g. you have a Jupyter notebook running on both). So, what you would normally do is something like this:

ssh -L 8888:localhost:8888 machine1
ssh -L 8888:localhost:8889 machine2

and so on for each machine. If you have a lot of machines, the above method can get a bit cumbersome. So, PortProxy handles all of this under the hood. Your mental model of all of the ports on all remote machines becomes like this:

[PortProxy_url]/[machine_name]/[forwarded_port]

For example, to get on port 8888 on machine1, navigate to localhost:5000/machine1/8888 in your browser, if PortProxy is running on localhost:5000.

And that's it!

Installation

pip install portproxy

Usage

Just run the server, one of two ways:

❯ python -m portproxy
 * Serving Flask app "portproxy.portproxy" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 308-152-645

or via

❯ portproxy
 * Serving Flask app "portproxy.portproxy" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 308-152-645

Then navigate to http://127.0.0.1:5000/ , and happy forwarding!

Releasing

Do the following steps:

python setup.py sdist

Upload it to test PyPI:

pip install twine
twine upload --repository testpypi dist/*
pip install -U --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple -U portproxy

Make sure you can install it and it works (e.g. run the examples). Now upload to actual PyPI:

twine upload dist/*

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

portproxy-0.6.2.tar.gz (9.1 kB view details)

Uploaded Source

File details

Details for the file portproxy-0.6.2.tar.gz.

File metadata

  • Download URL: portproxy-0.6.2.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/52.0.0.post20210125 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.8.5

File hashes

Hashes for portproxy-0.6.2.tar.gz
Algorithm Hash digest
SHA256 83dce4dc7659f6bb21e5993067e9faabead097816494a1d7a04fdc32b2e9dcfb
MD5 6f2efac583d2bf8bcdf91aa084a55279
BLAKE2b-256 417b06d298dcd8b506b6b298cfd21709c146d2bd70b615e09790dc3b712f0993

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