SSHTunnel——將本地埠映射到遠程伺服器

一、什麼是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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MUJVK的頭像MUJVK
上一篇 2025-02-16 18:10
下一篇 2025-02-17 17:02

相關推薦

  • 伺服器安裝Python的完整指南

    本文將為您提供伺服器安裝Python的完整指南。無論您是一位新手還是經驗豐富的開發者,您都可以通過本文輕鬆地完成Python的安裝過程。以下是本文的具體內容: 一、下載Python…

    編程 2025-04-29
  • STUN 伺服器

    STUN 伺服器是一個網路伺服器,可以協助網路設備(例如 VoIP 設備)解決 NAT 穿透、防火牆等問題,使得設備可以正常地進行數據傳輸。本文將從多個方面對 STUN 伺服器做詳…

    編程 2025-04-29
  • 解決docker-compose 容器時間和伺服器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與伺服器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • 如何選擇MySQL伺服器文件許可權

    MySQL是一種流行的關係型資料庫管理系統。在安裝MySQL時,選擇正確的文件許可權是保證安全和性能的重要步驟。以下是一些指導您選擇正確許可權的建議。 一、許可權選擇 MySQL伺服器需…

    編程 2025-04-27
  • 如何將Python代碼部署到伺服器

    Python是一種高級編程語言,常被用於數據分析、機器學習、Web開發等不同領域的工作。但是,只有將Python代碼部署到伺服器上,才能讓其真正發揮作用。 一、選擇伺服器 要將Py…

    編程 2025-04-27
  • Python伺服器客戶端

    本文將從以下幾個方面對Python伺服器客戶端進行詳細闡述:socket編程、HTTP協議、Web框架、非同步IO。 一、socket編程 Python的socket模塊是為網路編程…

    編程 2025-04-27
  • 如何解決很少人使用台灣伺服器的問題

    很少人使用台灣伺服器,這是一個比較普遍的問題,但並不難解決。本文將從多個方面進行詳細闡述。 一、認識台灣伺服器 台灣伺服器是指位於台灣地區的伺服器,它與大陸伺服器有一定區別。在台灣…

    編程 2025-04-27
  • Python如何放在伺服器運行

    Python是一種非常受歡迎的腳本語言,它可以用於Web開發、數據分析、機器學習等不同領域。在伺服器端,Python也是一個很好的選擇。本文將介紹Python如何放在伺服器上運行,…

    編程 2025-04-27
  • 如何將Linux系統日誌發送到日誌伺服器

    本文將介紹如何將Linux系統日誌發送到日誌伺服器,以方便管理和監控系統狀態。 一、安裝rsyslog軟體包 rsyslog是Linux系統上默認的系統日誌軟體,用於收集系統事件和…

    編程 2025-04-27
  • 配置 IIS 伺服器

    IIS(Internet Information Services)是微軟的一種網路伺服器軟體,可以在 Windows 系統上運行,支持 HTTP、HTTPS、FTP、SMTP 協…

    編程 2025-04-25

發表回復

登錄後才能評論