Connect to databases via ssh tunnel
Project description
A command tool and library to connect to databases with minimal fuss.
To install:
$ pip install tunneler
You will probably also need the database drivers for your preferred database. To install the postgres ones automatically when you install tunneler, do this:
$ pip install tunneler[pg]
To run:
$ tunneler name_of_task name_of_connection
As the above command shows, there are two concepts to understand when running tunneler, connections and tasks.
Define connections in a connections.yaml file in your current directory, as follows:
prod:
remote_host: publicjumpboxservername
ssh_username: username
ssh_pkey: |
-----BEGIN RSA PRIVATE KEY-----
.......................................
.......................................
-----END RSA PRIVATE KEY-----
private_dburl: postgres://username:password@privatedbservername/databasename
local_port: 5433
dev:
.....
You can also specify an ssh_config variable in the config. tunneler will then use the values from that hosts ssh config. An example:
prod:
ssh_config: prod-jumpbox
private_dburl: postgres://username:password@privatedbservername/databasename
local_port: 5433
dev:
.....
This will use the remote host/username/private key specified in your existing ssh config so you don’t need to repeat them in the config file
Tunneler will use this information to set up a local tunneled post where you can access this database directly.
A connection URL to this local port will then be provided to each task.
There are three inbuilt tasks:
test_connection (run this one to check your config is correct)
do_full_pg_dump (assumes you have pg_dump installed)
do_schema_pg_dump (also assumes you have pg_dump installed)
So for example to dump the production schema we’d run the following command:
$ tunneler do_schema_pg_dump prod
Custom tasks
Want to define your own tasks? Simply create a tasks.py file (or module) in the current directory.
Define a top level method in this file that accepts a connection url, and that method name will be available as a task.
For instance, the test connection task could be re-implemented as follows:
from sqlbag import S
def test_connection_custom(dburl):
with S(dburl) as s:
s.execute('select 1')
You’d then run this as follows:
$ tunneler test_connection_custom prod
Pretty simple.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for tunneler-0.1.1490760674-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5bc93dd2786f0cd4e61f6cbaedc92ffa83c45bbe0276862beb58344c1cb94f86 |
|
MD5 | 2ed9172a081f54290a4ee020a206fee5 |
|
BLAKE2b-256 | e433b3ff64979e212877dad5fb9308c052295d18ea1e214d32dac2ea54da6a72 |