Giả sử bạn đã chạy lệnh này: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -N
như đượ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 ssh
trang)
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 localhost
thay 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 ssh
trang):
[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:3306
liê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.com
sau đó kết nối với mysql-server.com
trê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 ssh
quá 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 pid
củ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ỉ kill
hoạt động). Điều đó có lợi ích tuyệt vời là không giết chết tất cả các ssh
kế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ả mysql
và 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 localhost
trên cổng 33060
, sẽ kết nối với mysql-server.com
trên cổng 3306
. Rõ ràng là bạn vẫn có thể kết nối localhost
trên cổng 3306
, vì vậy bạn vẫn có thể sử dụng mysql
máy chủ cục bộ .