通過SSH隧道安全連接遠(yuǎn)程MySQL數(shù)據(jù)庫(kù)端口的操作方法
最穩(wěn)妥的做法是通過 SSH 隧道將遠(yuǎn)程數(shù)據(jù)庫(kù)端口映射到本地,避免直接把 MySQL 端口暴露在公網(wǎng)上,適合運(yùn)維管理或遠(yuǎn)程開發(fā)場(chǎng)景。
先說結(jié)論:SSH 隧道能加密傳輸流量并利用 SSH 認(rèn)證機(jī)制,比直接開放 3306 端口更安全。
- 適合:需要遠(yuǎn)程管理數(shù)據(jù)庫(kù)但不想開放數(shù)據(jù)庫(kù)端口的場(chǎng)景
- 先準(zhǔn)備:確保擁有遠(yuǎn)程服務(wù)器的 SSH 登錄權(quán)限和密鑰
- 驗(yàn)收:本地客戶端能成功連接映射后的本地端口且數(shù)據(jù)查詢正常
命令速用版
在本地終端執(zhí)行以下命令,將遠(yuǎn)程服務(wù)器的 3306 端口映射到本地的 3307 端口:
ssh -L 3307:127.0.0.1:3306 -N -f user@remote_host
其中 user 是遠(yuǎn)程服務(wù)器登錄用戶,remote_host 是服務(wù)器 IP 或域名。完成后,本地連接 127.0.0.1:3307 即等同于連接遠(yuǎn)程數(shù)據(jù)庫(kù)。
為什么會(huì)這樣
MySQL 默認(rèn)通信協(xié)議在未配置 SSL 的情況下是明文的,直接暴露 3306 端口容易受到中間人攻擊或暴力破解。SSH 隧道利用已有的 SSH 加密通道轉(zhuǎn)發(fā)數(shù)據(jù),既不需要額外配置數(shù)據(jù)庫(kù) SSL 證書,又能復(fù)用服務(wù)器的 SSH 防火墻策略,實(shí)現(xiàn)網(wǎng)絡(luò)層面的隔離。
分步處理
第一步:確認(rèn) SSH 連通性先確保本地能通過 SSH 登錄遠(yuǎn)程服務(wù)器,建議使用密鑰認(rèn)證而非密碼,減少被爆破風(fēng)險(xiǎn)。如果尚未配置密鑰,可使用 ssh-keygen 生成并通過 ssh-copy-id 上傳。
第二步:建立隧道執(zhí)行上述速用版命令。參數(shù) -N 表示不執(zhí)行遠(yuǎn)程命令,-f 表示后臺(tái)運(yùn)行。如果需要保持連接活躍,可在 SSH 配置中開啟 ServerAliveInterval。
第三步:配置數(shù)據(jù)庫(kù)客戶端在 Navicat、DBeaver 或命令行中,主機(jī)填 127.0.0.1,端口填 3307,用戶名和密碼填寫數(shù)據(jù)庫(kù)本身的憑證,而非 SSH 憑證。
怎么驗(yàn)證是否生效
在本地終端使用 MySQL 客戶端嘗試連接:
mysql -h 127.0.0.1 -P 3307 -u db_user -p
連接成功后,執(zhí)行 SELECT 1; 確認(rèn)數(shù)據(jù)交互正常。同時(shí)可以在遠(yuǎn)程服務(wù)器上執(zhí)行 SHOW PROCESSLIST;,能看到來自 localhost 的連接請(qǐng)求,說明隧道轉(zhuǎn)發(fā)正確。
常見坑
1. 數(shù)據(jù)庫(kù)用戶權(quán)限限制MySQL 用戶表中的 host 字段必須允許來自 SSH 服務(wù)器本地的連接。通常設(shè)置為 localhost 或 127.0.0.1 即可,因?yàn)閷?duì)數(shù)據(jù)庫(kù)而言,連接確實(shí)來自服務(wù)器本機(jī)。如果設(shè)置為特定 IP,可能會(huì)拒絕連接。
2. 隧道斷開導(dǎo)致連接失效SSH 會(huì)話超時(shí)會(huì)導(dǎo)致隧道關(guān)閉。建議在 SSH 配置文件 ~/.ssh/config 中增加保活設(shè)置,或使用 autossh 工具自動(dòng)維護(hù)隧道連接。
3. 本地端口被占用如果本地 3307 端口已被占用,命令會(huì)執(zhí)行失敗。可更換為其他高位端口,如 33070,并在客戶端相應(yīng)修改配置。
到此這篇關(guān)于通過SSH隧道安全連接遠(yuǎn)程MySQL數(shù)據(jù)庫(kù)端口的操作方法的文章就介紹到這了,更多相關(guān)ssh隧道安全連接遠(yuǎn)程mysql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql如何查詢某一時(shí)間段內(nèi)沒有賣出的商品
室友拿來一道關(guān)于mysql查詢的問題,利用mysql查詢某一時(shí)間段內(nèi)沒有賣出的商品,需要的朋友可以參考下2014-02-02
Mysql中key和index的區(qū)別點(diǎn)整理
在本篇文章里小編給大家整理的是關(guān)于Mysql中key和index的區(qū)別點(diǎn)整理,需要的朋友們可以學(xué)習(xí)下。2020-03-03
mysql導(dǎo)入sql文件報(bào)錯(cuò) ERROR 2013 2006 2002
今天在做項(xiàng)目的時(shí)候遇到個(gè)問題,就是往mysql里導(dǎo)入sql文件的時(shí)候總是報(bào)ERROR 2013 2006 2002,研究了一番才找到解決辦法,這里記錄下來分享給大家2014-11-11
MySql 5.6.14 Win32位免安裝解壓縮版配置教程
本文給大家介紹mysql 5.6.14 win32 位免安裝解壓縮版配置方法,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,對(duì)mysql5.6.14 免安裝解壓縮版配置方法感興趣的朋友一起看看吧2016-11-11
MySQL實(shí)現(xiàn)分詞搜索(FULLTEXT)的方法
這篇文章主要介紹了MySQL實(shí)現(xiàn)分詞搜索(FULLTEXT)的方法,包括全文搜索的簡(jiǎn)單使用,建表添加FULLTEXT索引使用該技術(shù)非常簡(jiǎn)單,首先需要有一張表,我建立了一張圖書表并插入了兩條數(shù)據(jù),需要的朋友可以參考下2022-10-10
關(guān)于MySQL Memory存儲(chǔ)引擎的相關(guān)知識(shí)
這篇文章主要介紹了關(guān)于MySQL Memory存儲(chǔ)引擎的相關(guān)知識(shí),幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-11-11

