1. 程式人生 > >python通過跳板機連線MySQL

python通過跳板機連線MySQL

生產環境中,為了安全起見,大多數的資料庫是無法在本地直接訪問的,需要先連線跳板機,然後通過跳板機訪問。這麼做雖然在安全方面稍有保證,但是對於寫程式碼的人來說,增加了一定的難度,以下是我個人對python連線跳板機連線mysql的一些總結,希望能幫助到各位。

首先,需要下載sshtunnel包,使用pip即可,其次是連線MySQL的包,這個根據自己的喜好來就好,我個人常用的是mysql.connector和pymysql,這裡就使用mysql.connector。

程式碼如下:

import mysql.connector
from sshtunnel import SSHTunnelForwarder
server = SSHTunnelForwarder(
        (host_jump, 
int(port_jump)), # 跳板機的配置 ssh_pkey=ssh_pk_jump, ssh_username=user_name_jump, remote_bind_address=(host_mysql, int(port_mysql))) # 資料庫伺服器的配置 server.start() conn = mysql.connector.connect(host='127.0.0.1', port=server.local_bind_port, user=user_name_mysql, password=password_mysql, database=database) # do something... conn.close() server.close()

說明:

1:因為我的跳板機是通過金鑰連線的,所以需要ssh_pkey引數,值是金鑰的路徑,如果需要通過密碼連線,將該引數換成ssh_password即可;

2:SSHTunnelForwarder方法返回的server物件必須呼叫start()方法後才可以正常使用;

3:在連線MySQL時,connect()方法的引數中的host必須為127.0.0.1;

4:由於埠必須為數字型別,所以使用int()方法轉換;

5:使用結束後,為了安全起見,呼叫server的close()方法關閉連線,當然也可以使用with語句,如下:

with SSHTunnelForwarder(
        (host_jump, int(port_jump)
), # 跳板機的配置 ssh_pkey=
ssh_pk_jump, ssh_username=user_name_jump, remote_bind_address=(host_mysql, int(port_mysql))) as server: # MySQL伺服器的配置 conn = pymysql.connect(host='127.0.0.1', port=server.local_bind_port, user=user_name_mysql, password=password, database=database)
此時不僅可以省略close()方法,也可以省略start()方法。