สมมติว่าคุณรันคำสั่งนี้: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -Nตามที่อธิบายไว้ในโพสต์ที่คุณเชื่อมโยง
รายละเอียดของคำสั่ง:
ssh: มันค่อนข้างอธิบายตัวเองได้ เรียกssh.
-f:( จากman sshเพจ)
ขอให้ ssh ไปที่พื้นหลังก่อนดำเนินการคำสั่ง สิ่งนี้มีประโยชน์หาก ssh จะขอรหัสผ่านหรือข้อความรหัสผ่าน แต่ผู้ใช้ต้องการให้อยู่เบื้องหลัง
โดยพื้นฐานแล้วส่ง sshไปที่พื้นหลังเมื่อคุณป้อนรหัสผ่านเพื่อสร้างการเชื่อมต่อ มันจะช่วยให้เปลือกกลับพรอมต์ให้คุณที่มากกว่าการเข้าสู่ระบบคุณในการที่จะlocalhostremote-host
user@mysql-server.com: เซิร์ฟเวอร์ระยะไกลที่คุณต้องการเข้าสู่ระบบ
-L 3306:mysql-server.com:3306: นี่คือบิตที่น่าสนใจ -L(จากman sshหน้า):
[bind_address:] port: host: hostport ระบุว่าพอร์ตที่กำหนดบนโลคัลโฮสต์ (ไคลเอ็นต์) จะถูกส่งต่อไปยังโฮสต์ที่กำหนดและพอร์ตบนด้านรีโมต
ดังนั้น-L 3306:mysql-server.com:3306ผูกโลคัลพอร์ต3306กับพอร์ตระยะไกล 3306mysql-server.comบนโฮสต์
เมื่อคุณเชื่อมต่อท้องถิ่นพอร์ตการเชื่อมต่อจะถูกส่งต่อไปทั่วช่องทางที่ปลอดภัยเพื่อ3306 พื้นที่ห่างไกล , จากนั้นเชื่อมต่อกับพอร์ตmysql-server.commysql-server.commysql-server.com3306พอร์ต
-N: อย่าดำเนินการคำสั่ง สิ่งนี้มีประโยชน์สำหรับ "เพียงการส่งต่อพอร์ต" (อ้างถึง man page)
คำสั่งนี้มีผลกับอะไรบนเซิร์ฟเวอร์หรือไม่?
ใช่มันสร้างการเชื่อมต่อระหว่างlocalhostและmysql-server.comบนพอร์ต3306 3306
แล้วจะปิดอุโมงค์นี้ได้อย่างไร ...
หากคุณเคยใช้-fคุณจะสังเกตเห็นว่าsshกระบวนการที่คุณเปิดอยู่เบื้องหลัง วิธีปิดที่ดีกว่าคือการเรียกใช้ps aux | grep 3306ค้นหาpidของssh -f ... -L 3306:mysql-server.com:3306 -Nและkill <pid>. (หรืออาจจะkill -9 <pid>ลืมไปว่าใช้killงานได้) มีประโยชน์ที่ดีในการไม่ฆ่าsshการเชื่อมต่ออื่น ๆ ทั้งหมดของคุณ หากคุณมีมากกว่าหนึ่งการสร้างใหม่อาจเป็นเรื่องเล็กน้อย ...
... เพราะตอนนี้ฉันไม่สามารถใช้ mysql ในพื้นที่ได้อย่างถูกต้อง
นี่เป็นเพราะคุณ "จับ" กระบวนการภายในเครื่อง ได้อย่างมีประสิทธิภาพmysqlและส่งต่อการรับส่งข้อมูลใด ๆ ที่พยายามเชื่อมต่อกับกระบวนการนี้ไปยังกระบวนการระยะไกล มาก nicerวิธีการแก้ปัญหาที่จะmysqlไม่ใช้พอร์ตท้องถิ่น 3306ในพอร์ตไปข้างหน้า ใช้สิ่งที่ไม่ได้ใช้เช่น 33060 (โดยทั่วไปตัวเลขที่สูงกว่าจะใช้น้อยกว่าเป็นเรื่องปกติที่จะใช้ชุดค่าผสมของพอร์ตฟอร์เวิร์ดเช่นนี้: "2525-> 25", "8080-> 80", "33060-> 3306" หรือ คล้ายกันทำให้จำง่ายขึ้นเล็กน้อย)
ดังนั้นถ้าคุณใช้ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -Nคุณต้องการฟังก์ชั่นแล้วชี้ Zend เชื่อมต่อไป MySQL ของคุณไปยังlocalhostพอร์ต33060ซึ่งจะเชื่อมต่อกับพอร์ตmysql-server.com 3306เห็นได้ชัดว่าคุณยังคงสามารถเชื่อมต่อlocalhostกับพอร์ต3306ดังนั้นคุณยังคงสามารถใช้mysqlเซิร์ฟเวอร์ภายในได้