Làm cách nào để kết nối với máy tính thông qua máy tính khác bằng ssh


13

Tôi có ba máy tính.

PC1PC2 nằm trên một mạng LAN riêng, trong đó PC1 được PC2 gọi là192.168.0.2

PC2PC3 nằm trên một mạng LAN khác, trong đó PC2 được PC3 gọi là192.168.123.101

Làm cách nào tôi có thể kết nối với PC1 từ PC3 bằng SSH.

Có cái gì đó như:

ssh user@192.168.0.2 -via user@192.168.123.101

Câu trả lời:


19
ssh -o 'ProxyCommand ssh -W %h:%p user@192.168.123.101'

Sau đó, bạn có thể chỉ cần chạy ssh PC1.

Sử dụng tốt nhất thông qua một bí danh trong ~/.ssh/config:

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh -W %h:%p user@192.168.123.101

Đối với các phiên bản OpenSSH cũ hơn không có -Wtùy chọn (tôi nghĩ điều này có nghĩa là .45.4), hãy đảm bảo rằng netcat có sẵn trên PC2 và sử dụng

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh user@192.168.123.101 nc %h %p

1
+1 Yep và tôi có câu trả lời tương tự stackoverflow.com/questions/1010808/1122282#1122282 với một số chi tiết khác.
ephemient

cần thiết để cài đặt netcat
Stefan

4

Sử dụng SSH có một giải pháp rõ ràng:

  1. trên máy cục bộ của bạn thiết lập ~/.ssh/configsao cho nó có các mục sau:

    host WhatYouWillCallTheConnection
        hostname the.gateway.server.address.com
        user YourUsernameOnTheGateway
    
  2. Trên cả cổng và máy chủ cuối mà bạn muốn kết nối, hãy đảm bảo rằng bạn có các khóa công khai của máy khách cục bộ nằm trong ~/.ssh/authorized_keys

  3. Trên máy cổng, bạn cần thay đổi ~/.ssh/authorized_keyssao cho ở đầu dòng chỉ định khóa chung của máy khách, hãy thêm lệnh bắt buộc như sau:

    command="ssh -A user_name@ServerTheGatewaySees.ButTheClientCant.net" ...yourPublicKey....
    

Các -Alà để chuyển tiếp các đại lý nếu bạn không thích để gửi mật khẩu tất cả các thời gian ...

Bằng cách này, bất cứ khi nào bạn làm một cái gì đó giống như ssh WhatYouWillCallTheConnectionnó sẽ chạy thẳng qua cổng và kết nối bạn với máy chủ ở phía bên kia một cách trong suốt.


2
Không sử dụng ssh -Anếu bạn không tin người quản trị của máy cổng. Anh ấy không thể lấy khóa riêng của bạn, nhưng miễn là bạn được kết nối với cổng ssh -A, anh ấy có thể sử dụng tác nhân được chuyển tiếp để kết nối với các máy khác như bạn.
Jander

2

Chuyển tiếp cổng có thể có ích.
Từ PC1:

~# ssh -fN -L 22:PC3:7777 -l <user> PC2  

7777 có thể là bất kỳ cổng nào (miễn là nó chưa được sử dụng). Tôi chỉ thích số đó, cộng với bất kỳ "đặt hàng" nào tôi có thể quản lý bằng +1 (7778, 7779, v.v.).

Điều này đã được thực hiện, bạn sẽ có một đường hầm 'trong suốt' từ cổng cục bộ 7777 đến cổng PC3 của 22. Chỉ cần phát hành:

~# ssh -l <user> -p 7777 localhost  

Và bạn nên ở trên PC3.
Bạn cũng có thể sử dụng -D để tự động chuyển tiếp một cổng nếu bạn muốn thiết lập proxy SOCKS.

~# ssh -D <someport> -fN -L 22:PC3:7777 -l <user> PC2  

Chúc mừng!


1

2017+ (kể từ v7.3) -answer cho điều này là ProxyJump :

ssh -J user@jumphost user@destination

, viết tắt của:

ssh -o "ProxyJump user@jumphost" user@destination

Điều này có thể được rút ngắn ssh destvới một ~/.ssh/configđoạn như sau:

Host jump
    User MyJumpHostUser
    Hostname Jump.host.tld

Host dest
    ProxyJump jump
    User MyDestUser
    Hostname des.tin.ati.on

0

Giải pháp duy nhất tôi biết cho việc này là kịch bản ssh với Belier :

Belier cho phép mở shell hoặc thực thi lệnh trên máy tính từ xa thông qua kết nối SSH. Tính năng chính của Belier là khả năng vượt qua một số máy tính trung gian trước khi nhận ra công việc.

Cách đây một thời gian tôi đã tìm thấy README.sshhop này trên Trang chủ của Phòng thí nghiệm MIT Lincoln, nhưng tôi không thể tìm thấy thêm thông tin nào về điều đó. Có ai biết nhiều hơn không?

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.