SCP thông qua kết nối cổng SSH


8

Bố cục mạng của tôi là như thế này:

Bây giờ Alice có quyền truy cập vào cổng SSH (chỉ là cổng từ bây giờ) với:

ssh alice@external.ip

và tệp khóa được ủy quyền trên cổng trông như thế này

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

Vì vậy, khi Alice cố gắng kết nối với Cổng bằng khóa riêng của mình, cô ấy thực sự được kết nối với máy chủ Web (máy tính cổng có thể tạo kết nối với máy chủ web bằng khóa riêng không có mật khẩu, để duy trì trạng thái trong suốt).

Câu hỏi

  1. Làm thế nào tôi có thể thiết lập điều này để Alice cũng có thể quét mọi thứ lên máy chủ web?

  2. Tôi biết điều này tạo ra một kết nối riêng biệt, nhưng có cách nào để nó hoạt động như một ssh bình thường để thậm chí một cái gì đó giống như -R12345:localhost:22sẽ hoạt động không?

Câu trả lời:


10

Nếu bạn muốn truy cập máy chủ ssh phía sau máy chủ ssh khác, chỉ cần sử dụng "ProxyCommand". Ví dụ: thêm vào .ssh / config

Host Alice  
   User myLoginAtAlice # optional 
   ProxyCommand ssh -o Compression=no gateway netcat -w 90 %h %p
   ServerAliveInterval 30
   Compression yes

Host gateway
   HostName gateway.public.ip
   User myLoginAtTheGateway # optional 
   Compression yes

Sau đó, bạn có thể chỉ cần "ssh Alice" hoặc "rsync" hoặc "scp" trực tiếp bằng cách sử dụng "Alice" làm tên máy chủ. Phép thuật được ẩn giấu cho khách hàng.

Điều này cho phép bạn nhanh chóng cấu hình lại ssh của bạn trong trường hợp cấu trúc / cấu trúc mạng của bạn thay đổi và chỉ cần thay đổi .ssh / config, thay vì thay đổi mọi tập lệnh.

Giải thích: ssh sử dụng lệnh được cung cấp dưới dạng "lệnh proxy" làm vận chuyển thay vì kết nối TCP trực tiếp. Netcat là một công cụ mạng (trong số hàng triệu tính năng khác) chỉ đơn giản là chuyển hướng stdin / stdout của nó sang máy chủ từ xa được chỉ định. Vì vậy, "ssh gateway nc sshserver 22" kết nối bạn với máy chủ ssh của máy đó. % h là tên máy chủ và% p là cổng. Thiết lập như vậy cho phép bạn chỉ định "Cổng N" để thay đổi cổng mà không thay đổi dòng ProxyCommand.

Tôi kích hoạt nén đến máy tính cuối cùng và vô hiệu hóa nén bên ngoài vì nén dữ liệu được mã hóa hoặc nén không làm giảm âm lượng dữ liệu nữa. Bất kỳ vấn đề nào với các thiết lập nén cũng là tùy chọn.


Một câu hỏi nữa, rysnc không hoạt động như vậy nếu tôi có một cổng tùy chỉnh đến máy gateway. Bất kỳ suy nghĩ về điều đó.
zidarsk8

Thêm "Port port_number" vào phần có liên quan của .ssh / config. Vui lòng đọc các trang man ssh_config và sshd_config. Họ có rất nhiều thông tin và họ có thể mang lại cho bạn rất nhiều cảm hứng.
Raúl Salinas-Monteagudo

Ý tôi là, rsync không hoạt động nếu một cổng khác được chỉ định. Tôi đã cấu hình cổng để kết nối hoạt động bình thường, nhưng rsync đang gây ra sự cố cho tôi.
zidarsk8

3

Tôi đã có chính xác vấn đề tương tự như thế này nhưng tôi đã làm cho nó hoạt động mà không thay đổi hoàn toàn mọi thứ.

Tất cả những gì tôi đã làm là thêm $ SSH_ORIGINAL_COMMAND vào cổng ủy quyền_key để chuyển bất kỳ thứ gì xuống chuỗi đến máy chủ cuối cùng.

Vậy đây:

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

Trở thành:

#/home/Alice/.ssh/authorized_keys
command="ssh -q -t alice@web $SSH_ORIGINAL_COMMAND" ssh-rsa ABCD...E== alice@somehost

-Q được sử dụng để chặn thông báo đóng kết nối từ máy điểm cuối để nó không kết thúc ở đầu ra cục bộ nếu sử dụng chuyển hướng cục bộ.

Sau đó, bạn có thể sử dụng scp như thế này:

scp localFileName alice@exernal.ip:/path/on/end/point/remoteFileName

Điều này có thêm lợi thế là cho phép người dùng chuyển lệnh thông qua các lệnh đến máy chủ điểm cuối và lấy lại kết quả trong phiên cục bộ để họ có thể chuyển hướng chúng vào một tệp hoặc chuyển chúng sang một chương trình khác.

Ví dụ:

ssh -t alice@external.ip "ls -l" > tmp

Điều này hoạt động vì có vẻ như sshd cư trú biến môi trường $ SSH_ORIGINAL_COMMAND với và lệnh được chỉ định bởi máy khách ssh nhưng tôi không chắc tại sao điều này kỳ diệu cho phép scp đi qua máy điểm cuối cũng như các lệnh.


0

Thật không may, chuyển tiếp cổng sẽ không giúp sao chép các tệp trực tiếp từ máy trạm của Alice sang máy chủ web bằng cách sử dụng scp. Trong bài viết SO này tôi đã giải thích tại sao ssh (và scp vì nó sử dụng các cơ chế xác thực tương tự) sẽ không hoạt động đối với các kết nối được chuyển tiếp bằng ssh.

Tùy chọn sẽ là thiết lập máy chủ VPN tại máy đóng vai trò là cổng SSH, kết nối với nó và sau đó yo có quyền truy cập trực tiếp vào bất kỳ máy nào phía sau tường lửa.

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.