Tôi thích giải thích loại điều này thông qua hình dung. :-)
Hãy nghĩ về các kết nối SSH của bạn như các ống. Ống lớn. Thông thường, bạn sẽ với tay qua các ống này để chạy vỏ trên máy tính từ xa. Shell chạy trong một thiết bị đầu cuối ảo (tty). Nhưng bạn đã biết phần này rồi.
Hãy nghĩ về đường hầm của bạn như một ống trong một ống. Bạn vẫn có kết nối SSH lớn, nhưng tùy chọn -L hoặc -R cho phép bạn thiết lập một ống nhỏ hơn bên trong nó.
Mỗi ống có một khởi đầu và kết thúc. Ống lớn, kết nối SSH của bạn, bắt đầu với máy khách SSH của bạn và kết thúc tại máy chủ SSH mà bạn đã kết nối. Tất cả các ống nhỏ hơn có cùng một điểm cuối, ngoại trừ vai trò của "bắt đầu" hoặc "kết thúc" được xác định bởi việc bạn đã sử dụng -L
hoặc -R
(tương ứng) để tạo ra chúng.
(Bạn chưa nói, nhưng tôi sẽ giả sử rằng máy "từ xa" mà bạn đã đề cập, máy đứng sau tường lửa, có thể truy cập Internet bằng Dịch thuật Địa chỉ Mạng (NAT). Đây là loại quan trọng, vì vậy vui lòng sửa lại giả định này nếu nó sai.)
Khi bạn tạo một đường hầm, bạn chỉ định một địa chỉ và cổng mà nó sẽ trả lời, và một địa chỉ và cổng mà nó sẽ được gửi đến. Các -L
tùy chọn cho đường hầm để trả lời ở phía địa phương của đường hầm (máy chủ chạy khách hàng của bạn). Các -R
tùy chọn cho đường hầm để trả lời ở phía xa (máy chủ SSH).
Vì vậy, ... Để có thể SSH từ Internet vào một máy phía sau tường lửa, bạn cần có máy được đề cập để mở kết nối SSH với thế giới bên ngoài và bao gồm một -R
đường hầm có điểm "nhập" là phía "từ xa" của kết nối của mình.
Trong hai mô hình được hiển thị ở trên, bạn muốn cái ở bên phải.
Từ máy chủ được tường lửa:
ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com
Điều này nói với khách hàng của bạn để thiết lập một đường hầm với một -R
điểm nhập emote. Bất cứ thứ gì gắn vào cổng 22222 ở phía xa của đường hầm sẽ thực sự đạt đến "localhost port 22", trong đó "localhost" là từ góc độ của điểm thoát của đường hầm (tức là máy khách ssh của bạn).
Các tùy chọn khác là:
-f
nói với ssh để nền chính nó sau khi nó xác thực, vì vậy bạn không phải ngồi chạy một cái gì đó trên máy chủ từ xa để đường hầm vẫn còn sống.
-N
nói rằng bạn muốn có kết nối SSH, nhưng thực tế bạn không muốn chạy bất kỳ lệnh từ xa nào. Nếu tất cả những gì bạn đang tạo là một đường hầm, thì bao gồm tùy chọn này sẽ tiết kiệm tài nguyên.
-T
vô hiệu hóa phân bổ giả, phù hợp vì bạn không cố tạo vỏ tương tác.
Sẽ có một thách thức về mật khẩu trừ khi bạn đã thiết lập khóa DSA hoặc RSA để đăng nhập không cần mật khẩu.
Lưu ý rằng chúng tôi khuyên bạn nên sử dụng tài khoản vứt đi (không phải thông tin đăng nhập của riêng bạn) mà bạn đã thiết lập cho đường hầm / khách hàng / máy chủ này.
Bây giờ, từ shell của bạn trên yourpublichost , hãy thiết lập kết nối đến máy chủ được tường lửa thông qua đường hầm:
ssh -p 22222 username@localhost
Bạn sẽ nhận được một thử thách chính về máy chủ, vì có lẽ bạn chưa bao giờ đánh máy chủ này trước đây. Sau đó, bạn sẽ nhận được một thử thách mật khẩu cho username
tài khoản (trừ khi bạn đã thiết lập khóa để đăng nhập không cần mật khẩu).
Nếu bạn thường xuyên truy cập máy chủ này, bạn cũng có thể đơn giản hóa việc truy cập bằng cách thêm một vài dòng vào ~/.ssh/config
tệp của mình :
host remotehostname
User remoteusername
Hostname localhost
Port 22222
Điều chỉnh remotehostname
và remoteusername
cho phù hợp. Các remoteusername
trường phải phù hợp với tên người dùng trên máy chủ từ xa, nhưng remotehostname
có thể là bất kỳ tên máy phù hợp với bạn, nó không nhất thiết phải phù hợp với bất cứ điều gì được giải quyết.
(Để hiển thị điểm cuối đảo ngược trên IP không phải localhost , hãy xem bài đăng này )