Giả sử bạn đã chạy lệnh này: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -Nnhư được mô tả trong bài đăng bạn đã liên kết.
Phân tích lệnh:
ssh: điều đó khá dễ hiểu. Lời mời ssh.
-f: (Từ man sshtrang)
Yêu cầu ssh chuyển sang nền ngay trước khi thực hiện lệnh. Điều này hữu ích nếu ssh định yêu cầu mật khẩu hoặc cụm mật khẩu, nhưng người dùng muốn nó ở chế độ nền.
Về cơ bản, gửi sshđến nền sau khi bạn đã nhập bất kỳ mật khẩu nào để thiết lập kết nối; nó trả lại lời nhắc shell cho bạn localhostthay vì đăng nhập cho bạn remote-host.
user@mysql-server.com: máy chủ từ xa bạn muốn đăng nhập.
-L 3306:mysql-server.com:3306: Đây là một chút thú vị. -L(từ man sshtrang):
[bind_address:] port: host: hostport Chỉ định rằng cổng nhất định trên máy chủ cục bộ (máy khách) sẽ được chuyển tiếp tới máy chủ nhất định và cổng ở phía từ xa.
Vì vậy, -L 3306:mysql-server.com:3306liên kết với các địa phương cảng 3306đến cảng từ xa 3306 trên máy chủ mysql-server.com.
Khi bạn kết nối với cổng cục bộ3306 , kết nối sẽ được chuyển tiếp qua kênh an toàn tới mysql-server.com. Máy chủ từ xa , mysql-server.comsau đó kết nối với mysql-server.comtrên cổng 3306.
-N: không thực hiện lệnh. Điều này hữu ích cho "chỉ các cổng chuyển tiếp" (trích dẫn trang người).
Lệnh này có ảnh hưởng gì đến máy chủ không?
Có, nó thiết lập kết nối giữa localhost và mysql-server.com trên cổng 3306 .
Và làm cách nào để đóng đường hầm này ...
Nếu bạn đã sử dụng -f, bạn sẽ nhận thấy rằng sshquá trình bạn đã mở sẽ đi vào nền. Phương pháp đẹp hơn đóng nó là chạy ps aux | grep 3306, tìm pidcủa ssh -f ... -L 3306:mysql-server.com:3306 -N, và kill <pid>. (Hoặc có thể kill -9 <pid>; tôi quên nếu chỉ killhoạt động). Điều đó có lợi ích tuyệt vời là không giết chết tất cả các sshkết nối khác của bạn ; nếu bạn có nhiều hơn một, việc thiết lập lại chúng có thể là một ... hơi đau.
... bởi vì bây giờ tôi không thể sử dụng mysql cục bộ của mình đúng cách.
Điều này là do bạn đã "nắm bắt" quy trình cục bộ một cách hiệu quả mysqlvà chuyển tiếp bất kỳ lưu lượng truy cập nào cố gắng kết nối với quy trình đó, tắt đến quy trình từ xa mysql . Một giải pháp tốt hơn nhiều sẽ là không sử dụng cổng cục bộ 3306 trong chuyển tiếp cổng. Sử dụng thứ gì đó không được sử dụng, chẳng hạn như 33060. (Các số cao hơn thường ít được sử dụng hơn; việc chuyển tiếp một kết hợp như thế này khá phổ biến: "2525-> 25", "8080-> 80", "33060-> 3306" hoặc tương tự. Làm cho việc ghi nhớ dễ dàng hơn một chút).
Vì vậy, nếu bạn đã sử dụng ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -N, sau đó bạn sẽ trỏ hàm Zend connect-to-mysql của mình tới localhosttrên cổng 33060, sẽ kết nối với mysql-server.comtrên cổng 3306. Rõ ràng là bạn vẫn có thể kết nối localhosttrên cổng 3306, vì vậy bạn vẫn có thể sử dụng mysqlmáy chủ cục bộ .