1、簡介:
大多數人知道SSH是用來替代R命令集,用於加密的遠程登錄,文件傳輸,甚至加密的FTP(SSH2內置),因此SSH成爲使用極廣的服務之一,不僅如
此,SSH還有另一項非常有用的功能,就是它的端口轉發隧道功能,利用此功能,讓一些不安全的服務象TCP、POP3、SMTP、FTP,LDAP等等通
過SSH的加密隧道傳輸,然後,既然這些服務本身是不安全的,密碼和內容是明文傳送的,通過使用SSH隧道傳輸的話再想在其中間監聽也是徒勞無功的了。本
文主要介紹通過SSH隧道連接遠程Mysql服務器,SSH隧道更詳細的文章參見:官方關於SSH隧道的介紹文章
2、使用Windows客戶端連接
下面介紹使用windows系統下比較流行的MySQL終端工具SQLyog Enterprise,通過SSH隧道連接Mysql服務器。如下圖:
新建連接
MySQL標籤頁
SSH標籤頁
3、linux命令行下使用ssh命令建立SSH隧道
mysql服務器地址爲:192.168.99.52
本機地址爲:192.168.99.91
前提
將本機的ssh public key複製到mysql服務器中,也就是將本機的id_rsa.pub內容添加到mysql服務器的~/.ssh/authorized_keys文件中。我這裏用命令實現。
利用 ssh-keygen 命令 生成本機id_rsa.pub文件
# ssh-keygen 連續回車生成id_rsa.pub 文件
將id_rsa.pub文件複製到mysql服務器中
# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.99.52
開始挖隧道
利用ssh命令在本機開個3388的端口,這個端口爲隧道的入口端口,也就是說我一會兒通過在本機連接這個端口來達到連接mysql服務器3306端口的目的。使用命令如下:
ssh -NCPf [email protected] -L 3388:192.168.99.52:3306
參數解釋
-C 使用壓縮功能,是可選的,加快速度。
-P 用一個非特權端口進行出去的連接。
-f 一旦SSH完成認證並建立port forwarding,則轉入後臺運行。
-N 不執行遠程命令。該參數在只打開轉發端口時很有用(V2版本SSH支持)
這裏的[email protected] 是登陸mysql服務器的SSH用戶名和IP地址-L 3388:192.168.99.52:3306 這個參數的意思是說在本機開放3388端口到192.168.99.52:3306端口的映射,也就是說隧道的入口爲3388出口爲mysql服務器的3306
執行完後查看本地連接情況
# netstat -tulnp | grep 3388
tcp 0 0 127.0.0.1:3388 0.0.0.0:* LISTEN 14273/ssh
tcp 0 0 ::1:3388 :::* LISTEN 14273/ssh
查看本機與mysql服務器的ssh連接情況
# netstat -an | grep 192.168.99.52
tcp 0 0 192.168.99.91:7612 192.168.99.52:9698 ESTABLISHED
通過這兩條命令可知,執行完命令之後,本機與mysql服務器就建立起了ssh連接,且開放了3388端口。
通過隧道連接MySQL服務器
# mysql -u dbname -P 3388 -h 127.0.0.1 -pdbpwd
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 52562
Server version: 5.1.31-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
[email protected] [(none)] >show databases;
4 rows in set (0.00 sec)
連接成功!