Thursday, May 4, 2017

Connect MySQL by SSH tunnel

Pre require and Enviroment

Server 
  • Windows 2008 R2 Enterprise 64-bit 
  • ในที่นี้ผู้เขียนใช้ WinSSHD สำหรับเปิดบริการ SSH Server port 22
  • ที่สำคัญ Server ต้องติดตั้ง MySQL ให้เรียบร้อย

Client 
  • Windows 10 Enterprise 64-bit 
  • ใช้  PuTTY SSH Client ในการช่วยทำ tunnel port 22
  • ในที่นี้ผู้เขียนใน dbForge Studio for MySQL เป็น MySQL Client
Solved
  • เปิด PuTTY ขึ้นมา หน้าแรกมันจะเลือกเมนู Session ให้อยู่แล้วล่ะ ที่ Host name (or IP address) ใส่ให้เรียบร้อย ในที่นี้คือ 202.10.10.10 ส่วน port ก็ 22 อยู่แล้ว
  •  จากนั้นไปที่เมนู Tunnels ที่ Source port ในที่นี้ใส่เป็น 3308 , Destination เป็น localhost:3306 และคลิก Add
  • หลักจากคลิก Add เราก็จะได้ดังภาพด้านล่างนี้ สุดท้ายก็ทำการเชื่อมต่อ Server โดย คลิก Open
  • มันก็จะขึ้นหน้าให้ยืนยันตัวตน ก็ทำให้เรียบร้อย สมมุติในที่นี้ได้ยืนยันตัวตน และ PuTTY เราสามารถ remote ไปยัง server ได้เรียบร้อยแล้ว ให้เปิด PuTTY ค้างไว้นะ
  • ขึ้นตอนต่อมา เปิด MySQL Client ในที่นี้เราใช้ dbForge Studio for MySQL
  • host ใส่เป็น localhost
  • port ใส่เป็น 3308
  • ตามด้วย user และ password สำหรับ user MySQL บน Server
  • ตั้งค่าแค่นี้ก็สามารถเชื่อมต่อ MySQL บน Server ผ่าน port 22 ได้เลยคับ
Add
  • จะเห็นว่า ที่สำหรับคือ ตอนตั้งค่า Tunnel ใน PuTTY นะคับ
  • ที่ผู้เขียนใส่ 3308 จริงๆ แล้วใส่เป็น 3306 หรือ port หมายเลขอะไรก็ได้ที่ client ไม่ได้เปิดใช้งานน่ะ
  • ซึ่งในเครื่อง client ของผู้เขียนได้ทำการ เปิด 3306 ไว้ใช้ทดสอบระบบอยู่จริง ไม่สามารถใช้ 3306 เป็น source port ได้จริงเลี่ยงไปใช้ 3308 แทน ก็เท่านั้นคับ
  • ซึ่งผุ้เขียนคิดว่า วิธีแบบนี้สามารถประยุกต์ ใช้ได้กับ service ตัวอื่นๆ บน server ได้ด้วย เช่น เราอยากเชื่อมต่อ SQL Server ผ่าน port 22 น่าจะได้เหมือนกันนะคับคิดว่า (ยังไม่ได้ลอง)
  • และประยุกต์ใช้ได้กับ MySQL Client ตัวอื่นๆ ด้วยเพียงท่านใส่หมายเลข port เป็น 3308 และ host เป็น localhost ดังตัวอย่างนี้คับ
  • ที่เราทำมาทั้งหมดนี้เพื่ออะไร เพื่อรอดผ่าน firewall ของ เครือข่ายไงคับ เพราะโดยส่วนมาก เค้าจะปิดหมดทุก port นะ ยกเว้น 80 หรือ 443 แต่ ส่วนมากก็ อนุโลม 22 พอได้อยู่ คับ มันปลอดภัยเหมือนกัน
Ref
  • https://www.linode.com/docs/databases/mysql/securely-administer-mysql-with-an-ssh-tunnel