Làm thế nào để tôi biết nếu đường hầm ssh của tôi được tạo thành công?


21

Tôi dựa vào kịch bản sau đây tunnel.shđược viết bởi người khác để giữ cho đường hầm ssh tồn tại:

#!/bin/bash
export SSH_HOST=tim@server 

if [ ! -f /tmp/.tunnel ] 
then
echo "Creat SSH tunnel"
ssh -f -D 9999 $SSH_HOST "if [ -f ~/.tunnel ]; then rm ~/.tunnel; fi; while [ ! -f ~/.tunnel ]; do echo > /dev/null; done" & 
touch /tmp/.tunnel 
else
echo "Close SSH tunnel"
ssh $SSH_HOST "touch ~/.tunnel" 
rm /tmp/.tunnel 
fi
exit

Để tạo một đường hầm ssh liên tục, tôi chỉ cần phát hành tunnel.sh. Đường hầm sẽ không được đóng lại cho đến khi tôi phát hành tunnel.shlại.

Tôi đã tự hỏi làm thế nào tôi có thể xác minh nếu đường hầm ssh thực sự được tạo thành công?

Công dụng chính của đường hầm là in tài liệu cho một số máy in trong cùng mạng LAN với máy chủ và máy in chỉ có thể được truy cập từ bên trong mạng LAN. Sau khi tạo một đường hầm, bây giờ in không báo cáo bất kỳ vấn đề nào, nhưng vì tôi không ở đó, tôi không thể kiểm tra xem các tài liệu đã thực sự được in chưa.

Tôi nghĩ rằng vì bây giờ tôi đang ở trong mạng LAN nhờ vào đường hầm, IP bên ngoài của tôi phải giống với máy chủ. Nhưng thật ra chúng không giống nhau (tôi đã tìm ra chúng wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'). Tôi tự hỏi tại sao? Khi tôi kết nối với một số trang web trên internet với đường hầm còn sống, không phải máy chủ là điểm giữa giữa tôi và trang web internet trong kết nối, do đường hầm giữa tôi và máy chủ?

Câu trả lời:


25

Điều đó phức tạp hơn nhiều so với nó cần phải là :-)

Bắt đầu đường hầm:

ssh -f -N -D 9999 -M -S /tmp/ssh_tunnel_%h.sock -o ExitOnForwardFailure=yes $SSH_HOST && \
echo "ssh tunnel started successfully" || \
echo "ssh tunnel failed to start"

Dừng đường hầm:

ssh -S /tmp/ssh_tunnel_%h.sock -O exit $SSH_HOST

.

Đó là tất cả những gì bạn cần làm. Nếu bạn muốn các chi tiết, bỏ qua bên dưới.

Đối với câu hỏi thứ hai của bạn, IP một. Không, IP của bạn không thay đổi. Tất cả những gì bạn đã làm là tạo proxy SOCKS thông qua máy chủ từ xa. Hệ thống của bạn không tự động sử dụng proxy này trừ khi bạn nói với nó.

Giải thích về SSH
Đối số để bắt đầu đường hầm
-f:: Nói ssh để tự nền. Nó sẽ chỉ tự nền nếu nó khởi động thành công (hợp tác với -ođối số bên dưới).
-o ExitOnForwardFailure=yes: Điều này báo ssh thoát nếu nó không thể thiết lập proxy SOCKS.
-N: Đừng thực thi một lệnh. Chúng tôi chỉ muốn đường hầm, không làm gì trên máy chủ từ xa.
-D 9999: Proxy SOCKS của bạn.
-M: Điều này là bắt buộc để đối số -S hoạt động ở đây.
-S /tmp/ssh_tunnel_%h.sock: Điều này bảo nó sử dụng /tmp/ssh_tunnel_HOSTNAME.sock cho ổ cắm điều khiển của nó. Các -Mtùy chọn nói với nó rằng nhu cầu ssh để thiết lập ổ cắm này lên và không lệnh vấn đề để ssh khác đã lắng nghe trên socket. Bạn có thể sử dụng ổ cắm này để thiết lập các đường hầm bổ sung sau khi ssh đã chạy. Các%h sử dụng tên máy chủ của máy chủ từ xa như một phần của tên tệp.

Đối số để dừng đường hầm
-S /tmp/ssh_tunnel_%h.sock:: Điều này nên rõ ràng. Tuy nhiên vì chúng tôi không phát hành -M, điều đó có nghĩa là ssh nên kết nối với ổ cắm đã có sẵn và nói cho nó biết phải làm gì hơn là tự làm bất cứ điều gì.
-O exit: Đây là một phần của -S. Chúng tôi nói với ssh nghe trên ổ cắm để thoát.
Điều $SSH_HOSTvẫn còn cần thiết ở đây. Ngay cả khi bạn chỉ định đường dẫn ổ cắm tuyệt đối, không sử dụng %htên tệp, ssh vẫn muốn chỉ định máy chủ từ xa. Đây là lý do tại sao tôi đưa %hcác đối số. Cũng có thể sử dụng nó nếu ssh sẽ yêu cầu chủ nhà, và nó giữ mọi thứ ngăn nắp.


5

Loại đường hầm này không thay đổi thông tin địa chỉ IP của bạn. Tất cả những gì nó làm là yêu cầu máy tính của bạn mở cổng 9999 và chuyển tiếp các kết nối đến cổng đó đến máy từ xa (máy chủ tim @) thông qua kết nối ssh của bạn. Cách dễ nhất để kiểm tra kết nối đã được bật lên, là telnet đến cổng mà chuyển tiếp đã được tạo trên (trong ví dụ 9999 của bạn):

$ telnet localhost 9999
Máy chủ đang thử ... Đã
kết nối với máy chủ.
Nhân vật thoát là '^]'.

Nếu bạn nhận được "Đã kết nối với máy chủ." tin nhắn, có nghĩa là đường hầm của bạn lên. Nếu, thay vào đó, bạn nhận được: "Không thể kết nối với máy chủ từ xa: Kết nối bị từ chối" đường hầm của bạn không hoạt động.

Đối với câu hỏi thứ hai của bạn, đối với trình duyệt của bạn, trình duyệt của bạn sẽ không sử dụng đường hầm, trừ khi bạn nói với nó. Trong cài đặt mạng của trình duyệt, bạn có thể định cấu hình cài đặt proxy và chỉ định localhost: 9999 làm proxy vớ5 và sau đó các kết nối web của bạn sẽ sử dụng đường hầm ssh và xuất hiện từ địa chỉ IP của máy chủ.


+1 Cảm ơn! (1) Khi tôi in tới máy in trong mạng LAN, làm thế nào để biết nó đi đến cổng 9999 tức là sử dụng đường hầm? Không còn gì nữa à? (2) Có các loại đường hầm thay đổi thông tin địa chỉ IP của tôi không?
Tim

@Tim có khả năng, máy in cụ thể đó đã được định cấu hình để in tới một địa chỉ IP và cổng cụ thể. Điều này phụ thuộc vào cách thiết lập máy in của bạn. Thông thường, bạn có thể chỉ định cả khi bạn xác định máy in. Có, có những loại đường hầm sẽ có thông tin IP riêng được liên kết với chúng. Nói chung, đối với những thứ này, bạn tạo một giao diện điều chỉnh / tap en.wikipedia.org/wiki/TUN/TAP sẽ có địa chỉ IP riêng được đính kèm và tất cả lưu lượng truy cập từ địa chỉ đó sẽ xuất hiện từ một mạng khác .
gabe.

Cảm ơn! Trong tùy chọn Firefox của tôi, trong phần nâng cao -> kết nối ->, tôi chọn cấu hình proxy thủ công và nhập "localhost" cho HTTP Proxy và "9999" cho cổng của nó. Sau đó tôi không thể kết nối với bất kỳ trang web nào trong Firefox. Tôi tự hỏi tại sao?
Tim

@Tim hơi khó hiểu ... điều thích hợp để đặt là: SOCKS Host chứ không phải HTTP Proxy. Tôi đã có vấn đề tương tự khi lần đầu tiên tôi thử nó.
gabe.

1

Trong trường hợp của tôi (Google Chrome trên Ubuntu 14.10), địa chỉ bên ngoài của tôi không thay đổi, ít nhất là trong trình duyệt. Chỉ cần google "Địa chỉ IP của tôi là gì?" có và không có kết nối proxy.

Ngoài ra, sau khi bạn thiết lập proxy, hãy thử phá hủy đường hầm và xem liệu bạn vẫn có thể có lưu lượng truy cập hay không. Khi tôi thực hiện việc này, chrome trả về lỗi "Không thể kết nối với máy chủ proxy".

Một cách khác: sau khi tạo đường hầm đến máy chủ từ xa, tạo một phiên ssh mới và chạy tcpdump -A dst port 80. Sau đó duyệt đến một số trang và bạn sẽ thấy lưu lượng liên quan trong thiết bị đầu cuối.

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.