From c9f81f1c07de205af6a88968f4c352b7e38b5fcb Mon Sep 17 00:00:00 2001 From: Pablo Martin Date: Tue, 26 Jul 2022 14:32:17 +0200 Subject: [PATCH 1/5] Put version back to latest. --- _version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_version.py b/_version.py index d3ec452..ca70210 100644 --- a/_version.py +++ b/_version.py @@ -1 +1 @@ -__version__ = "0.2.0" +__version__ = "latest" From 9db02c154bd6f41d68729891073ec51b047a8a4d Mon Sep 17 00:00:00 2001 From: Pablo Martin Date: Fri, 19 Aug 2022 16:57:14 +0200 Subject: [PATCH 2/5] SSHTunnel can now optionally take the password of the SSH key file. --- connections.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/connections.py b/connections.py index 67edb91..a74df0d 100644 --- a/connections.py +++ b/connections.py @@ -21,15 +21,22 @@ def singleton(class_): @singleton class MySSHTunnel: def __init__( - self, ssh_host, ssh_port, ssh_username, ssh_pkey, remote_host, remote_port + self, + ssh_host, + ssh_port, + ssh_username, + ssh_pkey, + remote_host, + remote_port, + ssh_private_key_password=None, ): - self.tunnel = SSHTunnelForwarder( ssh_host=(ssh_host, ssh_port), ssh_username=ssh_username, ssh_pkey=ssh_pkey, remote_bind_address=(remote_host, remote_port), local_bind_address=("127.0.0.1", remote_port), + ssh_private_key_password=ssh_private_key_password, ) def start(self): @@ -115,12 +122,13 @@ def get_connection_to_mysql( :param connection_config: specifies host, port, etc. :return: the connection object """ - if connection_config["ssh_tunneling"]["use_tunnel"]: + mysql_connection_host = connection_config["host"] + + if connection_config.get("ssh_tunneling", {}).get("use_tunnel", None): open_ssh_tunnel(connection_config) mysql_connection_host = "127.0.0.1" - - if not connection_config["ssh_tunneling"]["use_tunnel"]: - mysql_connection_host = connection_config["host"] + # If we open an SSH tunnel, we reference the local bind instead of the + # actual host connection = mysql.connector.connect( host=mysql_connection_host, @@ -162,6 +170,10 @@ def open_ssh_tunnel(connection_config: dict) -> None: ssh_pkey=connection_config["ssh_tunneling"]["path_to_key"], remote_host=connection_config["host"], remote_port=connection_config["port"], + ssh_private_key_password=connection_config["ssh_tunneling"].get( + "ssh_private_key_password", + None, # Since password is optional, we need a safe default + ), ).start() print("SSH tunnel is now open.") From 02f412a42e1c18a2a8076db11807c9448fb65229 Mon Sep 17 00:00:00 2001 From: Pablo Martin Date: Fri, 19 Aug 2022 17:23:41 +0200 Subject: [PATCH 3/5] Updated the changelog. --- CHANGELOG.MD | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 6c74205..76ed3b8 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,5 +1,15 @@ # Changelog +## [unreleased] + +### Added +- Users can now specify a password for the SSH key used in the SSH tunnel. This is done by entering the password in + the config file, under the entry `connection_details > ssh_tunneling > ssh_private_key_password`. + +### Changed +- The `ssh_tunneling` section of the config file is now optional and the application will work even if the config + file does not contain it. + ## [0.2.0] - 2022-07-26 ### Added From 0effe7f3c863721115e82e1b0142a04aa267cc44 Mon Sep 17 00:00:00 2001 From: Pablo Martin Date: Fri, 19 Aug 2022 17:25:34 +0200 Subject: [PATCH 4/5] Updated config examples. --- .../{mysql_without_tunnel_config.json => mysql_config.json} | 4 +--- config_examples/mysql_with_tunnel_config.json | 3 ++- config_examples/trino_config.json | 5 +---- 3 files changed, 4 insertions(+), 8 deletions(-) rename config_examples/{mysql_without_tunnel_config.json => mysql_config.json} (86%) diff --git a/config_examples/mysql_without_tunnel_config.json b/config_examples/mysql_config.json similarity index 86% rename from config_examples/mysql_without_tunnel_config.json rename to config_examples/mysql_config.json index a849e48..e6859df 100644 --- a/config_examples/mysql_without_tunnel_config.json +++ b/config_examples/mysql_config.json @@ -5,9 +5,7 @@ "port": 3306, "user": "your_user", "password": "your_password", - "schema": "comprea", - "ssh_tunneling": { - "use_tunnel": false + "schema": "comprea" }, "queries_to_measure": [ { diff --git a/config_examples/mysql_with_tunnel_config.json b/config_examples/mysql_with_tunnel_config.json index 63fd975..8510894 100644 --- a/config_examples/mysql_with_tunnel_config.json +++ b/config_examples/mysql_with_tunnel_config.json @@ -11,7 +11,8 @@ "ssh_host": "the_ssh_tunnel_host", "ssh_username": "the_ssh_tunnel_user", "ssh_port": 22, - "path_to_key": "G:\\path\\to\\ssh\\key.pem" + "path_to_key": "G:\\path\\to\\ssh\\key.pem", + "ssh_private_key_password": "my_keys_password" } }, "queries_to_measure": [ diff --git a/config_examples/trino_config.json b/config_examples/trino_config.json index eaac0c0..8cd8806 100644 --- a/config_examples/trino_config.json +++ b/config_examples/trino_config.json @@ -7,10 +7,7 @@ "password": "your_password", "http_scheme": "https", "catalog": "app_lm_mysql", - "schema": "comprea", - "ssh_tunneling": { - "use_tunnel": false - } + "schema": "comprea" }, "queries_to_measure": [ { From 8e37e41d8271923ede063019b5d2f018ae5c603d Mon Sep 17 00:00:00 2001 From: Pablo Martin Date: Fri, 19 Aug 2022 17:27:07 +0200 Subject: [PATCH 5/5] Added info about SSH tunneling in the readme. --- readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/readme.md b/readme.md index e9b5652..476b275 100644 --- a/readme.md +++ b/readme.md @@ -41,6 +41,10 @@ A few notes: - I advice you to make the first query a silly, fast query such as `SELECT 1` to validate your connection and quickly confirm that everything is set up properly. +## Other features +- The connection to the database can be made through an SSH tunnel. See the examples in `config_examples` to + understand how to configure it. + ## A few more details - Queries are run sequentially, as in the second query will only start after the first query is finished.