Làm thế nào để ssh đến một máy chủ mà tôi không thể trực tiếp tiếp cận?


17

Bối cảnh

Tôi đang chạy Ubuntu Desktop với tư cách là máy chính của mình, tôi sẽ gọi D. Tôi muốn kết nối với máy chủ S thông qua ssh, nhưng tường lửa đang chặn tôi.

Tôi có quyền truy cập vào máy chủ S, thông qua một đường dẫn rất cồng kềnh, liên quan đến máy ảo Windows và PuTTY . Điều này làm cho việc làm việc với máy chủ này trở nên cực kỳ khó chịu: môi trường hoàn toàn khác, sao chép / dán không hoạt động, tôi không thể sử dụng máy tính để bàn của mình trong khi kết nối với nó (Alt-Tab bị hỏng bởi Máy ảo), v.v.

Tôi đã xác minh rằng tôi có thể ssh từ máy chủ S đến máy tính để bàn D của tôi (ngược lại với những gì tôi cần).

Tôi bằng cách nào đó có thể bắt đầu "chuyển tiếp cổng" hoặc tương tự từ máy chủ, để tôi có thể ssh đến máy chủ từ máy tính để bàn của mình không?


2
Nhảy máy chủ ... phải yêu em !!!
RonJohn

Bản sao có thể có của SSH SSH từ A-> B-> C
muru

@muru đây là một kịch bản khác, nhưng tất nhiên có liên quan (rốt cuộc là về đường hầm!). Trong trường hợp này tôi muốn giả mạo D->Sbằng cách lạm dụngS->D
dangonfast

Câu trả lời:


32

Bạn có thể sử dụng lệnh sau để thiết lập đường hầm SSH từ máy chủ từ xa đến máy cục bộ của mình:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

Khi đường hầm được thiết lập, bạn chỉ cần ssh đến máy chủ từ xa bằng lệnh sau:

$ ssh -p 1234 user@localhost

Xin lưu ý rằng bạn cần thiết lập các phím ssh để đăng nhập tự động (không có dấu nhắc mật khẩu). Nếu bạn muốn tạo đường hầm SSH tương tác, bạn có thể xóa các tùy chọn -f -N. Để biết thêm thông tin , man ssh.


Làm thế nào để đường hầm này thông qua Windows VM? (Nơi tôi làm việc, có nhiều lớp tường lửa và chỉ có một vài cổng được mở.)
RonJohn

@RonJohn Tôi tin rằng điều này sử dụng thực tế là (cho OP) ssh-ing từ máy chủ đến máy tính để bàn hoạt động, vì vậy điều này thiết lập một đường hầm từ máy chủ (cổng 22) đến máy tính để bàn (cổng 1234) có thể được sử dụng để kết nối với ssh trên máy chủ (sử dụng cổng 22). Windows VM chỉ được sử dụng để thiết lập đường hầm. (vui lòng sửa lại cho tôi nếu tôi sai)
pizzapants184

@dangonfast Ngoài câu trả lời, bạn có thể tìm thấy tài liệu có giá trị sau: spencerstirling.com/computergeek/sshtunnel.html
Pryftan

@RonJohn Tài liệu tôi vừa liên kết cũng có thể giúp trả lời câu hỏi đó, ít nhất là với nhiều lớp tường lửa, v.v. (nếu bộ nhớ phục vụ tôi đúng - đã rất lâu tôi mới đọc nó .. Tôi chỉ nhớ có liên kết từ nhiều năm trước).
Pryftan

1
@ pizzapants184 thực sự, đó là điểm khởi đầu của tôi: ssh từ S -> D, vì vậy tôi muốn lạm dụng điều này để thực hiện D -> S, mặc dù điều đó không hiệu quả. Tại sao mạng được cấu hình như vậy, là một cái gì đó thoát khỏi tôi. Nó có thể là cố ý hoặc cấu hình sai, nhưng miễn là nó hoạt động với tôi ...
dangonfast

5

Nếu bạn đang chạy phiên bản mới hơn của OpenSSH (7.3+) thì bạn có thể sử dụng ProxyJumpđể kết nối mọi thứ một cách kỳ diệu:

ssh -J windows_machine remote_server

Mà trong ~/.ssh/confighình của bạn giống như:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumphỗ trợ cú pháp SSH đầy đủ, vì vậy nếu bạn đang jimbật windows_servervà nó sử dụng cổng 2222cho ssh. remote_serverTại IP 192.168.0.110từ windows_serverđó bạn có thể viết:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

vẫn chỉ chạy ssh remote_serverđến đó.


Nếu bạn đang chạy phiên bản SSH cũ hơn, hãy sử dụng ProxyCommand - điều này cho phép bạn nói với SSH trước tiên hãy chạy lệnh để thiết lập kết nối proxy, trước khi chạy lệnh SSH thực tế.

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

Điều này sử dụng tùy chọn SSH -W , viết tắt cho cú pháp netcat phức tạp hơn .

Lưu ý rằng, khi bạn chạy ssh remote_server, windows_machinebạn cần phải đảm bảo rằng bạn sử dụng IP của remove_server hộp nhảy thay vì IP từ máy của bạn - những thứ này có thể giống nhau.

Sau đó, bạn có thể thêm chỉ thị này vào ~/.ssh/configtệp của mình :

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

Điều này có nghĩa rằng nếu remote_server một máy khác nhau khi nhìn từ windows_machinesau đó bạn có thể đặt rằng trong cấu hình và vẫn chỉ cần sử dụng ssh remote_server.


1
Đây là một câu trả lời tốt hơn nhiều.
Robert Riedl

Mặc dù hữu ích, điều này không trả lời câu hỏi đang được hỏi. OP tuyên bố rằng họ không thể SSH từ D-> S (những gì họ muốn), nhưng họ có thể SSH từ S-> D. Không có proxy ssh ở giữa (thay vào đó là máy ảo windows, có thể được RDP truy cập).
mbrig

@mbrig quả thật. Tôi chưa thử giải pháp này, nhưng tôi sẽ ngạc nhiên nếu nó hoạt động: Tôi được tường lửa từ D -> S
dangonfast

Nhưng bạn nói rằng bạn có thể truy cập vào máy windows - từ đó tôi hiểu rằng nó có thể hoạt động như một hộp nhảy giữa bạn và máy kia.
nhện của

1
Tôi có thể đăng nhập vào máy windows bằng công cụ propietary (VMWare Horizon). Tôi không bao giờ nói tôi có thể ssh với nó. Tôi thậm chí đã kiểm tra điều này trước khi đăng câu hỏi này bằng cách cài đặt máy chủ ssh đồng hành của Putty (tôi quên tên), nhưng các thử nghiệm của tôi đã thất bại. Tôi giả sử ssh được tường lửa vào mạng con windows.
dangonfast

1

Thay vì cố gắng phá vỡ mọi thứ và tạo ra một con đường phức tạp, bạn không thể yêu cầu SSH từ máy tính để bàn của bạn đến máy chủ được phép? Nếu bạn có nhu cầu và bạn nên truy cập vào máy chủ Tôi không thể hiểu tại sao bạn lại từ chối yêu cầu.


Quan tâm để giải thích các downvote? Câu hỏi là "Làm thế nào để ssh đến một máy chủ mà tôi không thể trực tiếp tiếp cận?" Vì vậy, câu trả lời của tôi để có một quy tắc tường lửa được đưa ra để cho phép nó là hợp lệ. Đó cũng là cách thích hợp để đi xung quanh nó theo thông lệ bảo mật tốt.
Solarflare

Tôi đang trong tuần đầu tiên của hợp đồng ba tháng của một khách hàng doanh nghiệp lớn. Tôi chưa được tặng máy tính xách tay (tôi sử dụng của tôi) và hầu như không có bàn. Tôi có hàng tá thông tin đăng nhập để sử dụng các dịch vụ khác nhau và tôi hầu như không quản lý để tung hứng toàn bộ. Những gì tôi muốn làm không phải là một yêu cầu khó khăn để thực hiện công việc của mình: Tôi có thể làm việc trong VM và đó là những gì ông chủ của tôi sẽ nói với tôi nếu tôi bắt đầu hỏi những câu hỏi vui. Hoặc anh ta sẽ chỉ cho tôi tới Bộ phận Trợ giúp, người sẽ đá cái lon xuống đường trong vài tuần / tháng tiếp theo.
dangonfast

Đối với tôi làm việc trong VM sẽ dễ dàng giảm 50% năng suất, vì vậy tôi muốn tránh nó càng nhiều càng tốt. Tuy nhiên, tôi yêu buổi biểu diễn này!
dangonfast

1
Tôi có thể hiểu điều đó. Theo kinh nghiệm của tôi, 'khách hàng doanh nghiệp lớn' có xu hướng khá khó chịu khi các nhà thầu phá vỡ tường lửa và chính sách để thực hiện công việc của họ, ngay cả khi đó là vì mục đích vị tha. Thực tế là bạn có thể SSH từ máy chủ đến máy tính để bàn của bạn nói với tôi rằng hoặc bạn không thể làm điều ngược lại là một sự giám sát hoặc một cái gì đó đã được đưa ra cho một mục đích cụ thể.
Solarflare

4
Đây là giải pháp thực sự duy nhất nếu bạn muốn tránh rủi ro bị sa thải vì phá vỡ các chính sách ... Ít nhất, hãy nói chuyện với những người có trách nhiệm trước khi sử dụng giải pháp Khaleds để họ biết bạn định làm gì.
Sven
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.