Trong /etc/ssh/sshd
cho 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/true
trê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
và -T
tù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.