1. 程式人生 > >ssh隧道(通過跳板機)連線mysql

ssh隧道(通過跳板機)連線mysql

案例:

A伺服器   B伺服器   C伺服器mysql

現在mysql伺服器C只能通過內網訪問,B伺服器就能通過內網連線訪問到mysql

A伺服器無法直接連線C伺服器mysql,所以要通過跳板機(跳板機指的是B伺服器)連線mysql

實現:

在A伺服器下面執行命令

ssh -p {ssh_port} -i {rsa_file} -fNL {local_port}:{mysql_ip}:{mysql_port} {ssh_user}@{ssh_ip}   命令詳解:
  • -p {ssh_port}: 指定跳板機器的ssh服務的埠(也就是B服務區)
  • -i {rsa_file}:指定連線跳板機的ssh公鑰,由跳板機的ssh服務端生成,如果不指定公鑰或者公鑰驗證失敗則會彈出密碼進行登入。(如果需要密碼登入可以不填-i)
  • -f:告訴SSH客戶端在後臺執行(也就是執行命令之後在程序監聽,需要關閉直接kill)
  • -N:只進行埠轉發,不執行命令
  • -L:指定連線服務的格式 [bind_address:]port:host:hostport
  • {local_port}:本地監聽的埠
  • {mysql_ip}:轉發到的mysql的ip或域名(遠端mysql主機地址)
  • {mysql_port}:轉發到的mysql的埠
  • {ssh_port}:跳板機的
  • {ssh_user}:跳板機的ssh使用者名稱(如果為rsa登入,則ras對應的使用者名稱和ssh_user一致)
  • {ssh_ip}:跳板機的ip或域名
參考例項: ssh -p 22 -i ./id_rsa.pub -fNL 3307:mysql_ip:3306 [email protected]_ip   A伺服器執行以上命令就可以連線遠端MySQL了   測試連線: 首先檢視埠有沒有監聽執行: ss -ntl

看到3307埠說明監聽了;

使用mysql命令開始連線:

mysql -h127.0.0.1 -P3307 -uroot -p    (此命令需要注意點-h要填,-P埠是大寫,不然會連線到自己本地的mysql而不是遠端的mysql)

連線成功之後執行命令:

show databases;

看到的是自己遠端mysql伺服器上的資料庫就說明連線成功了;