Skip to main content

a simple HTTP library to port forward requests on SSH tunnels to remove server

Project description

https://github.com/featureoverload/sshtunnel-requests/actions/workflows/ci.yml/badge.svg https://img.shields.io/pypi/v/sshtunnel-requests.svg https://img.shields.io/github/license/featureoverload/sshtunnel-requests.svg Documentation Status

Install

$ pip install sshtunnel-requests

Usage

import sshtunnel_requests

requests = sshtunnel_requests.from_url(
    'ssh://username@host:port', '<path>/<to>/private_key')

resp = requests.get('http://httpbin.org/ip')
print(resp.status_code)
# 200
print(resp.json())
# public IP of ssh-server machine

reused created tunnel to request more then once:

import sshtunnel_requests

requests = sshtunnel_requests.from_url(
    'ssh://username@host:port', '<path>/<to>/private_key')

urls = [
    'http://httpbin.org/headers',
    'http://httpbin.org/ip',
    'http://httpbin.org/user-agent',
    'http://httpbin.org/uuid',
]
for url in urls:
    resp = requests.get(url)
    print(resp.json())

thread example:

import sshtunnel_requests

requests = sshtunnel_requests.from_url(
    "ssh://<username>@<ssh server host>[:<port>]",
    "<path>/<to>/<private key>"
)

urls = [
    'http://httpbin.org/headers',
    'http://httpbin.org/ip',
    'http://httpbin.org/user-agent',
    'http://httpbin.org/uuid',
]

from concurrent.futures import ThreadPoolExecutor
from concurrent.futures import as_completed

results = []
with ThreadPoolExecutor(max_workers=3) as pool:
    futures = []
    for url in urls:
        f = pool.submit(
            lambda _req, _url: _req.get(_url),
            requests, url
        )
        futures.append(f)
    done_iter = as_completed(futures)
    for future in done_iter:
        response = future.result()
        results.append(response.json())

from pprint import pp
for result in results:
    pp(result)

use session:

import sshtunnel_requests

session = sshtunnel_requests.Session.from_url(
    "ssh://<username>@<ssh server host>[:<port>]",
    "<path>/<to>/<private key>"
)

assert session.cookies.values() == list()
resp = session.get(
    'http://httpbin.org/cookies/set/sessioncookie/123456789'
)
assert resp.json() == {'cookies': {'sessioncookie': '123456789'}}
assert session.cookies.values() == ['123456789']
resp = session.get('http://httpbin.org/ip')
assert 'Cookie' in resp.request.headers
assert resp.request.headers['Cookie'] == 'sessioncookie=123456789'
print(resp.json())
# public IP of ssh-server machine

Features

  • simply use sshtunnel and requests to request HTTP server in internal networking.

  • caching ssh tunnel connection to reused next requests of the same server.

  • automatic release connection if the ssh tunnel connection has not been used some time (without any consideration of memory leak and fd leak)

  • (thread) concurrent support of the same connection.

Test

$ cd e2e_tests && docker-compose up -d; cd ..
$
$ `which python` -m pip install -U pip
$ pip install .
$ pip install -r requirements_test.txt
$
$ # cd e2e_tests && docker-compose logs ssh; cd ..
$ # cd e2e_tests && docker-compose exec ssh cat /config/logs/openssh/current; cd ..
$ chmod 600 ./e2e_tests/ssh-server-config/ssh_host_rsa_key
$ # ssh -o "StrictHostKeyChecking=no" linuxserver@127.0.0.1 -p 2223 -i ./e2e_tests/ssh-server-config/ssh_host_rsa_key -v "uname -a"
$ pytest e2e_tests

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

sshtunnel_requests-0.1.3.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

sshtunnel_requests-0.1.3-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file sshtunnel_requests-0.1.3.tar.gz.

File metadata

  • Download URL: sshtunnel_requests-0.1.3.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for sshtunnel_requests-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f0f6ff818d295c4ccc8d523f3dd0f9c1bc9fad4879da57b97da4758c4e68c9de
MD5 bf4107d72d31abc010370f539233d73e
BLAKE2b-256 72de8d64d6a748f3bf237d40285aa5844020696336c87d75a931a585c504c8c5

See more details on using hashes here.

File details

Details for the file sshtunnel_requests-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: sshtunnel_requests-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for sshtunnel_requests-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8594927b0fb507768a72ab92b99a915f2fb926838c338200a388b4f7e69a59f8
MD5 450be96d0d3f8318de75ef0df6f32f4d
BLAKE2b-256 c883fcc32592eb2ebecc50fe6833e2b72628263b70301d058ef9fb9de7d91156

See more details on using hashes here.

Supported by

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