Làm cách nào tôi có thể định cấu hình kết nối SSH ngược với máy tính kết nối?


20

Tôi sẽ triển khai một số máy trong tương lai gần, thứ sẽ đứng sau các bộ định tuyến. Sẽ không khả thi khi thiết lập DNS động trên mỗi bộ định tuyến và chuyển tiếp cổng, vì vậy có cách nào để tôi có thể định cấu hình các máy này để bắt đầu kết nối TCP với máy tính của mình và sau đó máy tính của tôi khởi tạo kết nối SSH tới máy tính từ xa kết nối đó?

I E:

COMPUTER A OPENS TCP CONNECTION TO COMPUTER B
COMPUTER B OPENS SSH CONNECTION OVER THE EXISTING TCP CONNECTION TO COMPUTER A
COMPUTER B NOW HAS SSH CONNECTION TO COMPUTER A

Điều này là có thể, và nếu vậy, làm thế nào tôi có thể làm điều đó?


Câu trả lời:


21

Trong /etc/ssh/sshdcho máy tính B thiết lập:

AllowTcpForwarding yes
TCPKeepAlive yes

Từ máy tính A :

$ ssh -R 2222:localhost:22 ip.of.computer.b

Từ máy tính B :

$ ssh localhost -p 2222

Lưu ý rằng 2222 là số cổng cao tùy ý tôi chọn. Cổng đó trên Máy tính B sau đó sẽ được chuyển trở lại thông qua kết nối SSH được khởi tạo trên Máy tính A đến cổng 22. Nếu bạn có nhiều máy, bạn nên sử dụng một cổng khác nhau cho mỗi máy.

Đối với trường hợp sử dụng của bạn, có lẽ bạn sẽ muốn chạy nó từ một tập lệnh để bạn có thể biến nó thành một daemon và định kỳ thử kết nối lại nếu liên kết bị hủy. Bạn có thể sẽ muốn có một tài khoản đặc biệt với vỏ chỉ /bin/truetrên Máy tính B để xử lý các kết nối đến. Sau đó, bạn có thể thiết lập một phím đơn hoặc nhiều phím cho mỗi máy được phép "gọi về nhà".

Trên máy tính A bạn có thể tìm ra -n, -N-Ttùy chọn hữu ích để ngắt kết nối nó từ đầu vào địa phương (vì vậy nó có thể chạy ở chế độ nền), chứ không phải cố gắng chạy bất kỳ lệnh từ xa, chỉ cần mở đường hầm, và không tạo ra một tty.

Hầu hết các phương pháp sinh sản daemon thông thường không hoạt động tốt với việc thiết lập đường hầm mạng như thế này. Một vấn đề trong kết nối mạng sẽ khiến nó cố gắng vượt qua bức tường để vượt qua. Một vòng lặp đơn giản với một giấc ngủ để chờ đợi nên thực hiện các mẹo. Mười phút là một con số đẹp vì nó không làm ngập mạng và ghi nhật ký các tệp nếu có sự cố (như Máy tính B đang ngoại tuyến) nhưng nó vẫn giúp bạn quay lại nhanh chóng một cách hợp lý nếu kết nối bị ngắt.

#/bin/sh
while true; do
    sleep $((60*10))
    ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done

Một đoạn script như thế có thể được chạy khi khởi động /etc/rc.local. Thay đổi đầu tiên của bạn để đăng nhập vào máy sẽ bắt đầu khoảng mười phút sau khi Máy tính A khởi động.


1
Tốt đẹp. Vì vậy, về cơ bản, mỗi máy từ xa sẽ chuyển cổng SSH cục bộ sang một cổng trên máy cục bộ? Có thể là khôn ngoan khi mỗi máy chỉ đào đường hầm kết nối theo yêu cầu. Tôi có thể yêu cầu mỗi máy mở một kết nối HTTP duy trì và đẩy dữ liệu XML khi tôi muốn nó thử kết nối ngược lại, để giúp quản lý dễ dàng hơn (và không làm tắc nghẽn tất cả các cổng của tôi;]). Cảm ơn!
Naftuli Kay

@TKKocheran: Có khá nhiều cổng để lựa chọn ... cụ thể hơn là bạn sẽ có kiốt. Làm thế nào để giữ cho một đường hầm SSH mở bất kỳ tồi tệ hơn là giữ một kết nối http mở?
Caleb

Tôi đoán là bạn đúng, tôi chỉ có thể làm điều đó, nhưng sau đó tôi phải ánh xạ các cổng tới các máy và nhớ đó là cổng nào, trong khi tuyến khác sẽ được khởi tạo một cách lười biếng, tức là chỉ tạo một đường hầm SSH khi được yêu cầu.
Naftuli Kay

1
@TKKocheran: Bạn sẽ phải thực hiện ánh xạ theo bất kỳ cách nào, nếu không, ngay cả việc khởi tạo lười biếng của bạn cũng sẽ gặp phải tình huống họ cố gắng ghi đè lên nhau.
Caleb

1
Tôi không biết nếu nó thường được áp dụng, nhưng cấu hình sshd của tôi hiện đã bật/etc/ssh/sshd_config
gc5
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.