一、什麼是SSHTunnel
在訪問某些外部網路資源時,我們常常需要通過VPN或跳板機等方式進行訪問。SSHTunnel正是一種通過SSH隧道,將本地埠映射到遠程伺服器上的工具。通過SSHTunnel,我們可以在本地直接訪問遠程伺服器上的資源,無需再通過其他複雜的網路連接方式。
二、快速上手
通過以下Python代碼,你可以很快地在本地啟動一條SSHTunnel:
from sshtunnel import SSHTunnelForwarder import MySQLdb with SSHTunnelForwarder( ('your-ssh-host', 22), ssh_username='your-ssh-username', ssh_password='your-ssh-password', remote_bind_address=('your-remote-host', 3306)) as server: conn = MySQLdb.connect( user='your-db-username', passwd='your-db-password', db='your-database', host='127.0.0.1', port=server.local_bind_port) cursor = conn.cursor() cursor.execute('SELECT * FROM your-table') print(cursor.fetchall()) conn.close()
其中,SSHTunnelForwarder
是SSHTunnel的核心類,用於啟動和管理SSH隧道。在創建SSHTunnelForwarder
對象時,需要傳入SSH伺服器的地址、用戶名、密碼,以及目標遠程伺服器的地址和埠。使用with
語句管理SSHTunnelForwarder
對象的生命周期,確保隧道在使用完畢後正確關閉。
在啟動SSHTunnel後,我們就可以通過在本地連接127.0.0.1:{server.local_bind_port}
來訪問遠程伺服器上的MySQL資料庫了。
三、高級用法
SSHTunnel不僅僅只能用於訪問MySQL資料庫,還可以用來映射其他網路資源,比如Web服務、FTP、SMTP等。以下是一些高級用法示例:
1. 將本地埠映射到遠程Web伺服器
from sshtunnel import SSHTunnelForwarder import requests with SSHTunnelForwarder( ('your-ssh-host', 22), ssh_username='your-ssh-username', ssh_password='your-ssh-password', remote_bind_address=('your-remote-host', 80)) as server: res = requests.get(f'http://127.0.0.1:{server.local_bind_port}/your-url') print(res.text)
這裡我們使用Python中的requests
庫,訪問本地選定的埠,將請求轉發到遠程伺服器上。同樣地,在SSHTunnelForwarder
對象初始化時,我們需要指定遠程伺服器的地址和埠。這段代碼中,我們將遠程Web伺服器的80埠轉發到本地的{server.local_bind_port}埠,然後使用requests.get
方法發送一個HTTP GET請求,並輸出響應的內容。
2. 將遠程FTP伺服器映射到本地文件系統
from sshtunnel import SSHTunnelForwarder import os import ftplib with SSHTunnelForwarder( ('your-ssh-host', 22), ssh_username='your-ssh-username', ssh_password='your-ssh-password', remote_bind_address=('your-remote-host', 21)) as server: ftp = ftplib.FTP() ftp.connect('127.0.0.1', port=server.local_bind_port) ftp.login(user='your-ftp-username', passwd='your-ftp-password') ftp.cwd('your-ftp-dir') for file in ftp.nlst(): print(f'Downloading {file}') with open(os.path.join('your-download-dir', file), 'wb') as f: ftp.retrbinary(f'RETR {file}', f.write) ftp.quit()
這裡我們使用Python自帶的ftplib
庫來進行FTP傳輸。通過連接本地指定的埠和傳輸協議,我們可以將遠程FTP伺服器映射到本地的文件系統中。在執行了ftp.login
方法以後,就可以像普通的FTP客戶端一樣訪問伺服器中的文件了。
四、總結
通過SSHTunnel,我們可以方便地將本地埠映射到遠程伺服器,以便於訪問遠程網路資源。在實際開發中,我們可以將此技術應用於各種場景,比如調試遠程服務、訪問遠程資料庫等。SSHTunnel是一個優秀的Python庫,它提供了一種易於使用的方式,讓我們可以輕鬆地管理SSH隧道,並在本地訪問遠程伺服器上的資源。
原創文章,作者:MUJVK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/351520.html