在 FreeBSD (Heidi SQL) 上執行 MySQL 的 SSH 隧道
我正在嘗試使用 SSH 隧道訪問在 FreeBSD 10.1 伺服器上執行的 MySQL 伺服器。這些嘗試是通過 Heidi SQL ( http://www.heidisql.com/ ) 完成的。
FreeBSD 伺服器上的 SSH 守護程序不允許 root 登錄。我們必須首先使用輪組的帳戶成員,然後 SU 到 root。
我認為問題是:SSH 守護程序是否需要允許 root 登錄才能連接到 MySQL 伺服器?因為無論我嘗試什麼,MySQL 伺服器都會以“拒絕訪問”響應。
HeidiSQL 的輸出:
/* [SRV03 Live (SSH)] Connection to 127.0.0.1 closed at 2015-07-16 13:20:00 */ /* Connecting to 127.0.0.1 via MySQL (SSH tunnel), username ******, using password: No ... */ /* Attempt to create plink.exe process, waiting 4s for response ... */ /* C:\Program Files\Putty\plink.exe -ssh username@111.222.333.444 -pw "******" -P 12345 -N -L 3307:127.0.0.1:3306 */ SELECT CONNECTION_ID(); /* Connected. Thread-ID: 1913 */ /* Characterset: utf8mb4 */ SHOW STATUS; SHOW VARIABLES; /* Entering session "SRV03 Devel (SSH)" */ /* Access is denied */
對此的任何想法將不勝感激。
謝謝,
您的問題很可能與 MySQL 有關。HeidiSQL 少,FreeBSD 少。您提供了寶貴的小細節,但我們可以說以下內容:
誤解:
- FreeBSD 系統的“root”使用者和 MySQL 的“root”使用者沒有關係!
- 您無需以“root”身份登錄 FreeBSD 系統即可以 MySQL“root”身份在 MySQL 數據庫中工作
- 您不需要使用作為 wheel 成員的帳戶(因為您不需要 su 到“root”)
- 任何 FreeBSD 使用者都可以使用任何MySQL 使用者名連接到 MySQL。對 MySQL 的訪問受限於命名管道或 TCP。MySQL 不關心哪個系統 (FreeBSD) 使用者正在連接。
您正在嘗試將 3 種技術綁定在一起:MySQL、SSH 隧道和 HeidiSQL。
對於故障排除,您需要確認每個組件都在單獨工作。目前,您似乎試圖一次解決所有問題。但我們需要確定根本原因(不要與 FreeBSD “root”或 MySQL “root”混淆 :-))
自由BSD
當您嘗試連接到 MySQL 伺服器時,這會通過網路堆棧發生。如果您沒有防火牆設置,那麼您應該很高興。
但是,如果您有防火牆(通常是“pf”),那麼您可能需要允許訪問 localhost(127.0.0.1)的埠 3306(MySQL)。如果您在監獄中奔跑,則尤其如此。我假設您正在使用防火牆,因為您正在嘗試通過隧道傳輸流量。我注意到您在埠 12345 而不是 22 上執行 SSH。
如果您對正確的防火牆設置有疑問並且您正在使用受信任的網路,請在測試時禁用“pf”。這將使您的生活更輕鬆!
MySQL
確認您有一個工作的 MySQL 使用者,並且您可以使用本地網路連接連接到數據庫。
- 使用任何帳戶 SSH 到 FreeBSD 伺服器
- 使用 MySQL 客戶端訪問 MySQL 數據庫
mysql -u USERNAME –h 127.0.0.1 –p
這
-h
很重要,因為您隨後會使用 TCP 連接而不僅僅是命名管道。驗證您是否可以訪問要使用的架構mysql> USE databasename mysql> SELECT * FROM tablename LIMIT 10
海蒂SQL
如果您可以通過 MySQL 客戶端進行連接,那麼我們就可以開始測試 HeidiSQL。如果您在 FreeBSD 伺服器上沒有防火牆,請驗證您是否可以使用 MySQL 使用者名和密碼從 HeidiSQL 進行直接連接。
如果您確實有防火牆,那麼我會嘗試從您的 IP 打開埠 3306 進行測試。如果您使用“pf”,請使用以下選項之一:
pass in on $ext_if proto tcp from any to any port 3306 pass in on $ext_if proto tcp from YOURIPADDRESS to any port 3306
有了這個,您可以再次確認您可以在沒有隧道的情況下從 HeidiSQL 正確連接到 MySQL。完成測試後,您可以刪除此規則。
最後,您可以通過手動啟動隧道進行測試。退出 HeidiSQL 並在命令提示符下輸入以下內容:
"C:\Program Files\Putty\plink.exe" -ssh username@111.222.333.444 -pw "******" -P 12345 -N -L 3307:127.0.0.1:3306
這應該將您連接到您的 FreeBSD 伺服器並建立一個隧道。如果成功,您可以啟動 HeidiSQL 並嘗試與 MySQL 進行正常連接(但在埠 3307 上)
以上是我自己調試問題的步驟,例如您的問題。