Làm cách nào tôi có thể định cấu hình sao cho tôi luôn có thể SSH tới hệ thống của mình qua internet trên IP động?


11

Về cơ bản tôi muốn có thể làm một cái gì đó như teamviewer, trong đó bất kể cấu hình mạng là gì, miễn là cả máy chủ ssh của tôi (Máy A) và máy khách ssh (Máy B) đều có quyền truy cập internet (và một số máy chủ thứ 3, Máy C ), Tôi có thể có quyền truy cập - lý do cho việc này là tôi muốn có thể di chuyển máy A xung quanh, cắm điện, bật tự động kết nối với một trong một số mạng wifi được cấu hình sẵn (mỗi mạng duy nhất / khác nhau) , mà không cần cấu hình chuyển tiếp cổng hoặc tương tự trên các mạng và có thể đăng nhập vào nó qua internet từ Máy B

Làm thế nào tôi có thể thực hiện điều này? Tôi không ngại thiết lập một cái gì đó trên một máy chủ có địa chỉ IP tĩnh để giúp bắt tay, nhưng tôi cũng không bận tâm đến máy chủ của bên thứ 3 nếu có thứ gì đó tồn tại (như cách nói của teamviewer)

chỉnh sửa cho rõ ràng: Tôi có 3 máy, AB và C

A là một pi mâm xôi không đầu sẽ được bật / tắt ở các vị trí ngẫu nhiên, kết nối với mạng wifi đã được xác nhận trước

B là máy có màn hình, bàn phím phù hợp, v.v. mà tôi muốn kết nối từ

C là máy chủ AWS được thuê mà tôi có địa chỉ IP tĩnh, có thể tin cậy SSH từ B và có thể cài đặt bất cứ thứ gì cần thiết để giúp B kết nối với A


Bạn có thể ssh đến máy thứ 3?
Anthon

@Anthon Tôi nghĩ vậy, tôi đặt tên lại là AB và C và thêm mô tả cho họ, hy vọng điều đó sẽ xóa nó
user2813274

ho no-ip.com ho
Joshua

1
no-ip.com sẽ không giúp đỡ nếu tường lửa chu vi tại vị trí của bạn không cho phép lưu lượng truy cập trở lại!
bobstro

Tôi đã từng sử dụng sshđường hầm, rất ngắn gọn. Tôi không bao giờ có thể khiến họ ở lại, mặc dù, ngay cả với autossh; nếu đường lên bị rớt vì bất kỳ lý do gì, chúng luôn phải được khởi động lại bằng tay. Cuối cùng, tôi đã thiết lập một VPN nhỏ cho riêng mình với OpenVPN và nó đã hoàn thành công việc một cách tốt đẹp.
Blacklight Shining

Câu trả lời:


11

Khi bạn có máy C trên internet, hãy tạo một tài khoản đặc biệt có tên sesamevà trên A bạn tạo một tài khoản có khóa chung / riêng mà bạn đã sao chép khóa chung vào sesametài khoản trên C.

Bây giờ bạn có thể đăng nhập từ A đến C, nhưng thay vì làm như vậy:

ssh -N -R 19930:localhost:22 sesame@yourserverC

(bạn có thể muốn kết hợp điều này với một tuyên bố về giấc ngủ hoặc ví dụ 10 giây và gói nó thành một vòng lặp vô tận để kết nối được thiết lập lại nếu WiFi bị hỏng khiến nó bị hỏng)

Từ máy B, thông thường đăng nhập vào bất kỳ tài khoản nào bạn có trên C (có thể nhưng không phải là sesametài khoản, các tài khoản khác nhau là những gì tôi sử dụng). Và một khi bạn đang ở trên C, hãy đăng nhập vào A bằng cách sử dụng:

ssh localhost -p 19930

Tất nhiên bạn có thể sử dụng một số khác với 19930.

Có thể chạy ssh -N -R ...từ /etc/rc.localnếu khóa riêng của bạn trên A không được bảo vệ bằng mật khẩu. Trong trường hợp đó, đảm bảo tạo sesamemột tài khoản riêng với chức năng giới hạn, để khi máy A của bạn bị xâm nhập / đánh cắp, rủi ro cho máy chủ C của bạn bị hạn chế. Đó cũng là lý do tại sao tôi khuyên bạn nên sử dụng một tài khoản riêng để đi từ B đến C.

Bạn thực sự có thể thiết lập các vỏ đăng nhập cho sesame/etc/passwdđến /bin/false, vì vậy bạn không còn có thể sử dụng tài khoản để đăng nhập.


Giải pháp này khác với sử dụng TeamViewer, ở đó máy chủ được sử dụng để mở các cổng sau đó được chuyển hướng để giao tiếp trực tiếp. Giống như các chương trình như BitTorrent giao tiếp trực tiếp sau khi tìm thấy máy để tải xuống (mà không phải mở cổng trước).
Anthon

Vì vậy, sự khác biệt chính là theo cách này TẤT CẢ lưu lượng truy cập đi qua máy chủ C, so với C chỉ được sử dụng để thiết lập liên kết và sau đó không được sử dụng cho phần còn lại của kết nối - Tôi ổn với điều đó. Bạn có một điểm tốt khi bảo mật, có điều gì tôi nên làm đặc biệt là làm cho vừng không thể làm gì trên C ngoài mức tối thiểu để đăng nhập không? (Hệ thống RHEL)
user2813274

1
@ user2813274 Thật vậy, tất cả các đề tài đều đi qua C trong kịch bản này (điều này sẽ giúp ích cho BitTorrent). Tôi không chắc chắn như thế nào đến nay bạn có thể giới hạn các sesametài khoản trên C, nó có thể là bạn có thể làm cho nó chạy /bin/falsenhư vỏ đăng nhập (kể từ ssh không bao giờ thực sự đăng nhập vào), hoặc hạn chế nó bằng cách thêm một command=tham số trong~/.ssh/authorized_keys
Anthon

@ user2813274 Trong trường hợp bạn chưa tự mình thử: nếu bạn có tài khoản đặc biệt để thiết lập proxy ngược, bạn có thể vô hiệu hóa đăng nhập vào tài khoản đó bằng cách thay đổi vỏ đăng nhập thành /bin/false.
Anthon

1
@ user2813274 Có, tôi đã thử nó và nó sẽ cho phép tôi thiết lập đường hầm ngược (bạn cần một tài khoản khác để đến máy chủ C để làm điều đó ssh localhost -p portnum)
Anthon

7

Cài đặt đường hầm IPv6 (như Sixxs ) trên Raspberry Pi của bạn. Bây giờ bạn sẽ có một địa chỉ IPv6 tĩnh cố định sẽ trực tuyến bất cứ khi nào Pi của bạn trực tuyến. Hãy chắc chắn rằng bạn bảo mật Pi của mình khi nó được kết nối với thế giới.

Nếu B của bạn được kết nối với mạng IPv6, thì hãy kết nối trực tiếp với Pi. Nếu B không được kết nối với mạng IPv6, hãy sử dụng C làm máy chủ nhảy, trong đó bạn kết nối qua IPv4 với C và sau đó ssh qua IPv6 từ C đến Pi của bạn.


Tôi thích điều này vì nó thậm chí không yêu cầu C nếu các mạng hỗ trợ IPV6, mặc dù vậy tôi sẽ phải dùng thử - có vấn đề nào liên quan đến tường lửa chặn điều này theo mặc định không?
user2813274

1
Sixxs cung cấp nhiều hơn một giao thức để tạo đường hầm IPv6. Nếu bạn sử dụng Bất cứ điều gì trong bất cứ điều gì (AYIYA), bạn sẽ cần cổng TCP 3874 và cổng UDP 5072 mở từ Pi sang Internet. Trên mạng gia đình, điều này sẽ ổn; mạng lưới công ty hoặc trường có thể khác nhau.
garethTheRed

Việc cài đặt đường hầm nghe có vẻ khả thi, nhưng có vẻ như tôi sẽ phải đăng ký dịch vụ Sixxs, đợi họ quay lại với tôi bằng địa chỉ IP, v.v. - không còn đơn giản nữa - nhưng vẫn có khả năng là một giải pháp tốt, nhưng tôi đừng nghĩ rằng đó là con đường tôi sẽ đi bây giờ.
user2813274

1

Cũng có một cái nhìn về điều này:

Công nghệ được sử dụng giống như mô tả trong câu trả lời được chấp nhận, nhưng nó sử dụng một số tập lệnh để tự động hóa mọi thứ và làm cho giải pháp chung chung hơn. Nó cũng làm cho toàn bộ cấu hình bên trong một Docker container, để hệ thống chính an toàn trong trường hợp có gì đó bị xâm phạm.

Tuy nhiên, nó không cung cấp kết nối tự động từ A đến C, nó phải được bắt đầu bằng tay. Có lẽ bạn có thể tùy chỉnh giải pháp một chút để nó thực hiện chính xác những gì bạn muốn.


0

Có lẽ bạn cần sử dụng khác với ssh hoặc khái niệm đường hầm .. Tôi khuyên bạn nên sử dụng khái niệm nhắn tin như whatsapp hoặc telegram .. Nhưng tôi nghĩ, nếu bạn muốn sử dụng một cái gì đó như vim, nó không tốt như ssh ..

Telegram có ứng dụng khách telegram-cli mà bạn có thể sửa đổi để chấp nhận và thực thi một số lệnh nhất định và thực hiện nó trong raspi ..

Nếu bạn sử dụng Telegram, bạn có thể đơn giản hóa mạng của mình và ít nhất là giảm máy C để thực hiện Hub vì máy chủ C được trừ với máy chủ nhắn tin telegram .. telegram đã xuất hiện với máy khách iphone và Android vì vậy tôi không nghĩ rằng bạn cần B của mình Máy cũng vậy, bạn có thể cài đặt telegram client cho HĐH cụ thể nếu bạn muốn .. bảo mật? tin nhắn telegram được mã hóa .. Nếu ai đó muốn ddas raspi của bạn? họ sẽ ddos ​​máy chủ telegram trước ..

Vì vậy, miễn là raspi của bạn có thể kết nối với máy chủ telegram (đơn giản là raspi của bạn kết nối với internet) ngay cả raspi đứng sau tường lửa / proxy / IP riêng / IP động, bạn luôn có thể thực hiện điều khiển từ xa ..

Với khái niệm này, bạn có thể làm điều khiển từ xa mọi lúc, mọi nơi ..


Wat. Điều đó không an toàn, bạn đang tin tưởng một số ứng dụng nhắn tin ngẫu nhiên, bạn đang nói rằng OP nên sửa đổi ứng dụng nhắn tin ngẫu nhiên đã nói để làm cho nó hoạt động. Điều này thậm chí còn không nhận ra rằng ứng dụng nhắn tin ngẫu nhiên sẽ hoàn toàn phá vỡ thứ gì đó như vim và có độ trễ khủng khiếp.
Một người dùng khác

Chà, nếu bạn sử dụng nó chỉ để gửi lệnh thì tôi nghĩ nó ổn .. nếu bạn sử dụng nó cho một cái gì đó như vim, tôi không nghĩ nó tốt .. lời khuyên tốt .. tôi sẽ chỉnh sửa câu trả lời của mình
Wicaksono Trihatmaja

Tôi không nghĩ rằng đây là những gì tôi muốn, tôi muốn truy cập toàn bộ vỏ, không thực sự ít hơn thế - cho đến khi tạo ra Pi .. Tôi không thực sự lo lắng, trước hết vì tôi phải thực hiện một thiết lập đặc biệt để thậm chí tự mình kết nối với nó, thứ hai bởi vì các kết nối của nó sẽ bị gián đoạn và thay đổi ngẫu nhiên dù sao đi nữa
user2813274

0

Tôi nghĩ bạn nên xem chuyển tiếp cổng ssh ngược. Tóm lại, trước tiên bạn khởi tạo ssh từ A đến C bằng cú pháp bên dưới và sau đó sử dụng cổng đó để chuyển trở lại từ C đến A. Bạn sẽ không nhấn vào tường lửa nhà của A khi bạn làm như vậy vì R-Pi đã có một đường hầm.

ssh -R 2210: localhost: 22 myCoolAwsSite.com

Vui lòng xem xét phân nhánh bảo mật khi bạn làm như vậy. Bạn có thể thêm một số cron jujitsu để kết nối được thiết lập lại sau khi khởi động lại.


Ơ ... làm thế nào khác với câu trả lời của Anthon?
user2813274
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.