สมมติว่าคุณรันคำสั่งนี้: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -N
ตามที่อธิบายไว้ในโพสต์ที่คุณเชื่อมโยง
รายละเอียดของคำสั่ง:
ssh
: มันค่อนข้างอธิบายตัวเองได้ เรียกssh
.
-f
:( จากman ssh
เพจ)
ขอให้ ssh ไปที่พื้นหลังก่อนดำเนินการคำสั่ง สิ่งนี้มีประโยชน์หาก ssh จะขอรหัสผ่านหรือข้อความรหัสผ่าน แต่ผู้ใช้ต้องการให้อยู่เบื้องหลัง
โดยพื้นฐานแล้วส่ง ssh
ไปที่พื้นหลังเมื่อคุณป้อนรหัสผ่านเพื่อสร้างการเชื่อมต่อ มันจะช่วยให้เปลือกกลับพรอมต์ให้คุณที่มากกว่าการเข้าสู่ระบบคุณในการที่จะlocalhost
remote-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
กับพอร์ตระยะไกล 3306
mysql-server.com
บนโฮสต์
เมื่อคุณเชื่อมต่อท้องถิ่นพอร์ตการเชื่อมต่อจะถูกส่งต่อไปทั่วช่องทางที่ปลอดภัยเพื่อ3306
พื้นที่ห่างไกล , จากนั้นเชื่อมต่อกับพอร์ตmysql-server.com
mysql-server.com
mysql-server.com
3306
พอร์ต
-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
เซิร์ฟเวอร์ภายในได้