一、什么是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/n/351520.html