ssh thông qua một bộ định tuyến mà không cần chuyển tiếp cổng


11

Tôi có một máy chủ linux và tôi muốn đặt nó vào một mạng gia đình phía sau bộ định tuyến. Tôi cần phải ssh đến máy chủ này đôi khi từ bên ngoài, nhưng tôi không muốn thiết lập chuyển tiếp cổng vì tôi không có quyền truy cập vào bộ định tuyến và tôi cũng không biết ip của bộ định tuyến.

Những gì tôi có thể làm là đưa một số chương trình vào máy chủ linux, vì vậy khi được kết nối với Internet, nó sẽ liên tục gửi dữ liệu đến máy chủ khác của tôi trực tuyến để tôi biết địa chỉ IP của nó. Nhưng có cách nào để ssh đến máy chủ đằng sau bộ định tuyến từ bên ngoài không? một cái gì đó như NAT hoặc ổ cắm duy trì kết nối mạng?

Cảm ơn rất nhiều

Câu trả lời:


24

Những gì bạn muốn làm là ssh TỪ "máy chủ linux" của bạn ĐẾN một cái gì đó ở bên ngoài, chẳng hạn như "my_other_server" hoặc thứ gì khác mà cả hai máy chủ có thể nhận được.

Bạn sẽ sử dụng chuyển tiếp cổng từ xa ssh.
[user@linux_server]$ ssh -R8022:localhost:22 my_other_server.com
Giải thích: Kết nối với my_other_server và mở cổng 8022 ở đó sẽ chuyển tiếp lại cho tôi trên cổng 22.

Từ my_other_server.com, bạn sẽ có thể ssh đến localhost trên cổng 8022 và lưu lượng truy cập của bạn được chuyển đến linux_server cõng trên linux_server -> my_other_server đường hầm [user@linux_server]$ ssh -p8022 localhost
Giải thích: Kết nối với chính tôi trên cổng 8022 được chuyển tiếp tới linux_server

Nếu bạn gặp sự cố với đường hầm linux_server ban đầu -> my_other_server bị rớt ra, bạn có thể tạo một tập lệnh để giữ cho nó mở, điều chỉnh các cài đặt giữ nguyên hoặc sử dụng tự động.


1
Cảm ơn, điều đó làm việc tuyệt vời! Tôi muốn sử dụng kịch bản để giữ cho nó mở. Câu hỏi khác là nếu tôi có 1000 'máy chủ linux' như vậy và chỉ có một 'my_other_server', tôi có thể ssh với bất kỳ ai trong số họ theo cách này không? Tôi cho rằng tất cả họ cần cổng khác nhau và có cách nào tốt hơn để làm như vậy?
Jiechao Li

Vâng, điều đó phụ thuộc. Bây giờ bạn đang ở trên linux_server, bạn có thể chỉ ssh đến linux_server2 và linux_server3 từ đó không? Đó sẽ là dễ nhất. Vì vậy, có, bạn có thể thực hiện việc này nhiều lần, thay vì sử dụng 8022, bạn sử dụng 8023, 8024. Nếu bạn đi theo tuyến đường đó, hãy tạo tệp ~ / .ssh / config trên "my_other_server" có chứa tất cả các số cổng, vì vậy bạn chỉ cần ssh [bí danh] thay vì ssh [port] localhost. Điều đó sẽ trở nên cồng kềnh.
MattPark

1
Có thể thiết lập điều này chỉ với hai máy? Kết nối B với A, A trở lại B thông qua chính nó?
adamyonk

1
Tôi vừa làm nó. Có thể xác nhận rằng nó hoạt động. \ o /
adamyonk

Vâng, người đàn ông --- rõ ràng là bạn đã tìm ra nó. Bạn có thể sử dụng một cái gì đó như autosshđể giữ cho nó mở.
MattPark

3

Bạn có thể sử dụng VPN loại để hoạt động, nhưng nó sẽ yêu cầu bạn phải có máy chủ mà máy chủ không thể truy cập có thể truy cập. Sau đó, bạn có thể thiết lập OpenVPN trên máy chủ, PC và máy chủ được tường lửa, bật client-to-clientvà bạn đã hoàn tất. http://openvpn.net/howto.html


Cảm ơn. Tôi đang xem xét điều này, nhưng có vẻ hơi phức tạp. Nếu tôi hiểu chính xác, tôi cần cài đặt OpenVPN trên cả hai máy chủ để chúng có thể giao tiếp mà không cần cấu hình bộ định tuyến, phải không?
Jiechao Li

Chính xác. Bạn định cấu hình máy chủ là "máy chủ", sau đó hai máy khách bạn muốn kết nối với nhau là "máy khách" trong cấu hình. Mặc dù vậy, SSH ngược lại có vẻ dễ dàng hơn đối với bạn.
Nathan C

2

Câu trả lời này dựa trên câu trả lời được chấp nhận, nhưng thêm các chi tiết cho phép tôi hoàn thành nó. Tôi xin lỗi vì lời giải thích của người đi bộ, vì đây không phải là chuyên môn của tôi.

Giả sử bạn có hai máy tính, AB. Bạn muốn sshtừ Ađến Bvà bạn không thể thực hiện bất kỳ chuyển tiếp cổng nào trong các bộ định tuyến được kết nối với chúng.

Như câu trả lời được chấp nhận, bạn cần một máy chủ Sđể thực hiện việc này: trong máy tính B, bạn sẽ cho phép các sshkết nối đến từ S; và từ máy tính A, bạn sẽ truy cập vào đường hầm đó Sđể tiếp cận B.

Nhưng làm thế nào để bạn có được máy chủ đó S? Tôi tìm thấy serveo(liên kết: https://serveo.net/ ). Nó được sử dụng rất đơn giản. Bạn không phải cài đặt bất cứ thứ gì hoặc đăng ký và nó là miễn phí. Theo trang web, các bước để làm theo là:

  1. Hãy nghĩ về một bí danh cho máy tính B. Ví dụ , computer_B_alias.

  2. Trong máy tính B, thực thi ssh -R computer_B_alias:22:localhost:22 serveo.net.

  3. Bây giờ, bạn có thể truy cập máy tính Btừ máy tính Abằng cách thực hiện các thao tác sau trong máy tính A: ssh -J serveo.net user@computer_B_alias, nơi bạn phải thay thế userbằng tên của người dùng trong máy tính B.

PS: Tất nhiên, bạn biến điểm 2 thành một nhiệm vụ tự động khi khởi động máy tính của mình B.

PSS: Trước khi bạn thử điều này, hãy đảm bảo rằng nó đã sshđược cài đặt trong cả hai máy tính. Đối với Ubuntu, sudo apt-get install sshsẽ thực hiện công việc.


1

Lâu rồi mới trả lời. Nó có thể giúp ai đó đang tìm kiếm bây giờ.

Nếu bạn muốn truy cập một máy chủ đằng sau NAT và bạn không muốn viết mã, có lẽ bạn có thể tìm một công cụ trong số bên dưới và sử dụng bất kỳ thứ gì phù hợp với nhu cầu của bạn.

Cả hai công cụ trên đều cho rằng bạn có quyền truy cập vào máy linux để cài đặt ứng dụng khách của chúng Một số lợi ích của chúng là:

  • Cả hai đều cho phép bạn truy cập vào thiết bị đầu cuối bằng giao diện web
  • Bạn không cần một máy chủ ssh đảo ngược trung gian của riêng bạn.
  • Rất dễ cài đặt
  • Cả hai đều là nguồn mở

Cá nhân tôi thích tmate hơn vì bạn có thể lưu trữ máy chủ tmate trên máy chủ trung gian của riêng bạn (đối với ssh ngược) trong khi teleconsole chỉ có thể kết nối với máy chủ của riêng họ để ssh ngược.


1

Bạn có thể sử dụng ngrok . Quá trình này rất dễ dàng:

  1. Đăng ký trên trang web của họ
  2. wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-urdy-linux-amd64.zip
  3. giải nén ngrok-urdy-linux-amd64.zip
  4. ./ngrok authtoken <khóa duy nhất từ ​​tài khoản ngrok của bạn>
  5. ./ngrok tcp 22
  6. Trên máy tính từ xa, bạn có thể kết nối như thế này:
    1. ssh tên người dùng@0.tcp.ngrok.io -p 11000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.