python通過跳板機連線MySQL
阿新 • • 發佈:2019-02-01
生產環境中,為了安全起見,大多數的資料庫是無法在本地直接訪問的,需要先連線跳板機,然後通過跳板機訪問。這麼做雖然在安全方面稍有保證,但是對於寫程式碼的人來說,增加了一定的難度,以下是我個人對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)此時不僅可以省略close()方法,也可以省略start()方法。), # 跳板機的配置 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)