Đường hầm kết nối ssh thông qua một máy trung gian trong một lệnh duy nhất


10

Có cách nào, trong một lệnh duy nhất, để thiết lập kết nối ssh từ máy tính A của tôi, thông qua máy tính B, đến máy tính C, để tôi có quyền truy cập vào trình bao trên máy tính C không?

Một nếp nhăn (dường như loại trừ đơn giản là chuyển tiếp kết nối ssh bằng tùy chọn -L) là tôi có mật khẩu vào tài khoản trên máy tính B và tài khoản trên máy tính B được phép kết nối với tài khoản trên máy tính C, nhưng Tôi không có mật khẩu vào tài khoản trên máy tính C.


Câu trả lời:


8

Tôi hiểu rằng bạn chỉ muốn đăng nhập vào máy tính C, không thực sự đào bất cứ thứ gì từ A đến C. Vì vậy, điều này nên thực hiện thủ thuật:

ssh -t computer-b "ssh computer-c"

Bạn có thể phải nhập mật khẩu hai lần, lần đầu tiên cho máy tính B và sau đó cho máy tính C, nhưng điều này có thể tránh được bằng cách sử dụng xác thực cặp khóa của ssh.


1
Cảm ơn - nó hoạt động! Nếu tôi có thể táo bạo như vậy để yêu cầu theo dõi. Bất kỳ ý tưởng làm thế nào tôi có thể scp một tập tin từ A đến C trong một lệnh duy nhất?
sự tỉnh táo

Đó là một chút khó khăn. Có thể thực hiện bằng cách thêm tar vào hỗn hợp, nhưng nếu chỉ có một tệp và máy tính B có không gian đĩa để giữ nó trong một thời gian, thì việc sao chép nó theo hai bước sẽ dễ dàng hơn rất nhiều.
af.

Bạn cũng có thể làm điều này ba lần! ssh -t computer-b "ssh -t computer-c 'ssh computer-d'": D
gak


0

Nếu bạn đang sử dụng các phím ssh, bạn có thể tạo một khóa mới cho máy B và sử dụng khóa đó để kết nối từ A đến B. Trên máy B, bạn có thể thêm

command="ssh C" ssh-....

trong ~/.ssh/authorized_keystập tin Điều đó có nghĩa là bất cứ khi nào bạn kết nối với B bằng phím ssh đó, nó sẽ thực thi ssh Clệnh.

Tôi không biết nếu điều này làm việc với scp.


0

Sử dụng ProxyCommand

Xem man ssh_config. Tôi khuyên bạn nên sử dụng ProxyCommand. Hãy lấy kịch bản ban đầu của bạn:

  • Máy tính A (máy tính của bạn)
  • Máy tính B (tên máy chủ proxy)
  • Máy tính C (chỉ có thể truy cập qua SSH từ Máy tính B)

Chỉnh sửa ~/.ssh/configvới các nội dung sau.

Host computerb
    HostName <hostname or IP of Computer B>

Host computerc 192.168.35.*
    ProxyCommand ssh computerb nc -w 180 %h %p

Bây giờ bạn sẽ có thể truy cập trong suốt Máy tính C. ví dụ:

ssh computerc

Ưu điểm của phương pháp này

An toàn hơn

Bạn chỉ cần khóa riêng của mình trên Máy tính A (máy tính của bạn). Các nclệnh sẽ hoạt động như một proxy trong đó SSH sẽ mã hóa giao thông qua. Điều này bao gồm xác thực. Việc phân phối khóa riêng của bạn đến nhiều máy chủ là một ý tưởng rất tệ (vì bất kỳ máy chủ nào bị xâm phạm với khóa riêng của bạn đều làm tổn hại đến khóa riêng của bạn).

Trận đấu Nhiều điểm đến

Một có thể phù hợp với nhiều máy tính đích sử dụng Host. Một máy tính hoặc bất kỳ máy tính nào trong một mạng cụ thể (ví dụ 192.168.35.0/24trong ví dụ trên) để ủy quyền qua Máy tính B. Nó cũng đóng vai trò là bí danh.

ssh 192.168.35.27

Trong ví dụ trên, nó sẽ ủy quyền thông qua Máy tính B để đến địa chỉ IP.

Proxy chuỗi Daisy

Sử dụng phương pháp này, bạn có thể tạo chuỗi nhiều proxy tự động khi cần thiết. ví dụ: bạn có thể thêm Máy tính D chỉ có thể truy cập từ Máy tính C và nó sẽ hoạt động trong suốt.

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerdsẽ tự động ủy quyền thông qua Máy tính C và Máy tính B trong các ssh_configví dụ trên .


Tôi đang sử dụng ProxyJump thay vì ProxyCommand và nó hoạt động tốt. Có vẻ như bây giờ có nhiều lựa chọn hơn.
fgiraldeau
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.