การส่งต่อ SSH รับฟังบนพอร์ตภายในเครื่อง 13306 แต่ mysql ยังคงเชื่อมต่อกับฐานข้อมูลภายในเครื่อง—หรือรายงานว่า Unix socket ภายในเครื่องหายไป บน Unix ไคลเอนต์ MySQL ที่ได้รับ localhost อาจเลือก Unix socket แทน TCP การระบุพอร์ตไม่จำเป็นต้องเปลี่ยนตัวเลือกนั้น

สำหรับการส่งต่อ TCP ที่ได้รับอนุมัติอยู่แล้ว ให้ระบุโปรโตคอลอย่างชัดเจน:

mysql --protocol=TCP --host=127.0.0.1 --port=13306 \
  --user=dbuser --password

ชื่อผู้ใช้เป็นเพียงตัวอย่าง; ตัวเลือกพาสเวิร์ดขอให้ป้อนแบบโต้ตอบ คำสั่งเชื่อมต่อกับตัวรับฟัง TCP ภายในเครื่องแทน Unix socket

แยกการเข้าสู่ระบบทั้งสองออกจากกัน

เส้นทาง SSH แบบคงที่สามารถมีรูปแบบนี้ได้:

ssh -N -L 127.0.0.1:13306:db.internal:3306 [email protected]

เซิร์ฟเวอร์ SSH ของเกตเวย์เข้าถึง db.internal:3306 จากนั้น MySQL จะตรวจสอบสิทธิ์บัญชีฐานข้อมูลผ่านสตรีมไบต์นั้น คีย์ SSH ที่ได้รับการยอมรับไม่ได้ให้สิทธิ์เข้าสู่ฐานข้อมูล และข้อจำกัดแหล่งที่มาของฐานข้อมูลจะเห็นการเชื่อมต่อมาจากด้านนั้นของเส้นทาง

นี่คืออะแดปเตอร์ TCP แบบคงที่ ไม่ใช่การตั้งค่า SOCKS ที่ mysql ใช้ แอปพลิเคชันไม่ต้องการการเจรจา SOCKS เพราะปลายทางการส่งต่อมีเป้าหมายเดียวที่กำหนดไว้ล่วงหน้า

รักษาตัวตน TLS ของฐานข้อมูลที่ตั้งใจไว้และนโยบายใบรับรองในที่ที่ใช้งาน การเชื่อมต่อ socket กับ loopback ไม่ทำให้ใบรับรองฐานข้อมูลใช้ได้กับชื่อบริการอื่น การเชื่อมต่อ TCP ภายในเครื่องที่สำเร็จตัดสินใจเรื่องการเลือกการขนส่ง ไม่ใช่การตรวจสอบสิทธิ์ฐานข้อมูลหรือการตรวจสอบ TLS ในภายหลัง

บทความที่เกี่ยวข้อง