Mysql

在 FreeBSD (Heidi SQL) 上執行 MySQL 的 SSH 隧道

  • July 29, 2015

我正在嘗試使用 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 使用者,並且您可以使用本地網路連接連接到數據庫。

  1. 使用任何帳戶 SSH 到 FreeBSD 伺服器
  2. 使用 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 上)

以上是我自己調試問題的步驟,例如您的問題。

引用自:https://serverfault.com/questions/706191