Làm cách nào để SCP một tệp thông qua một máy chủ trung gian?


15

Tôi đang sử dụng Ccygwin trên WinXP (với bash shell). Tôi muốn SCP một tệp từ localhost của tôi đến một máy từ xa - host2. Tuy nhiên, tôi chỉ có thể SSH đến một máy trung gian - host1, và sau đó SSH đến host2. (Lưu ý, tôi không thể truy cập host2 từ localhost của mình).

Tôi nghĩ rằng đường hầm là câu trả lời của tôi, nhưng khi tôi cố gắng thiết lập một đường hầm

ssh -L 9999:localhost:9998 dalvarado@host1 'ssh -L 9998:localhost:1234 -N dalvarado@host2'

Nhưng sau khi gõ lệnh này và nhấn enter, hệ thống chỉ bị treo. Cách thích hợp để thiết lập một đường hầm và sau đó SCP một tập tin là gì?

Cảm ơn, -


2
Bản sao của superuser.com/questions/174160/ - xem câu trả lời của tôi dưới đây để biết tóm tắt.
jmetz

Từ người dùng Meir D : Cũng xem serverfault.com/questions/337274/ từ
fixer1234

Có thể trùng lặp các tệp scp qua máy chủ trung gian
tripleee

Câu trả lời:


17

Điều này đã được trả lời tốt nhất ở đây .

Để tóm tắt: đưa những điều sau vào ~/.ssh/config

Host target.machine
User          targetuser
HostName      target.machine
ProxyCommand  ssh proxyuser@proxy.machine nc %h %p 2> /dev/null

và sau đó chỉ cần scpnhắm mục tiêu.machine bất cứ lúc nào bạn muốn proxy qua proxy.machine!

Cũng hoạt động cho ssh, vì vậy sẽ giúp bạn tiết kiệm thời gian ssh-ing cho máy đích.

Tín dụng nên đến user24925, người đã trả lời điều này vào năm 2011.


13

Để thiết lập đường hầm SSH, hãy sử dụng định dạng sau:

ssh -L 9999:host2:22 user@host1

Lệnh này kết nối với host1as uservà đường hầm cổng 9999 trên máy tính cấp lệnh cho cổng 22 trên host2. -Nlà tùy chọn hoặc bạn có thể sử dụng một cái gì đó như tophoặc watchđể giữ cho phiên sống nếu cần.

Sau đó, chỉ cần lưu trữ scphost2 trên localhost: 9999.


1
Khi tôi chạy lệnh này, tôi có nên kết thúc việc đăng nhập vào host1 không? Ngoài ra, sau khi chạy lệnh này, tôi đã mở một bash shell khác và chạy "scp hello.txt localhost: 9999", nhưng gặp lỗi "ssh: kết nối với máy chủ localhost 22: Lỗi từ chối kết nối". Tôi làm gì sai ở đây?
Dave

3
Khi bạn chạy lệnh này, bạn sẽ được kết nối với host1, vâng. scpCú pháp lệnh của bạn là không chính xác mặc dù. Hãy thử đây là scp -P 9999 hello.txt user@localhost:/path/to/destination/filenơi userngười dùng host2mà bạn muốn đăng nhập.
Mưa

1
@Rain, bạn có thể đưa ví dụ này vào câu trả lời chính;)
dmeu

5

Kể từ OpenSSH 7.3 , bạn có thể sử dụng -Jhoặc -o ProxyJumpchỉ định máy chủ pháo đài / nhảy. Do đó, để SSH node2thông qua node1:

ssh -J you@node1 you@node2

SCP không có -Jđối số, nhưng nó cho phép -o, vì vậy điều này hoạt động:

scp -o ProxyJump=you@node1 file.txt you@node2:~

3

Trước tiên bạn có thể scp tệp vào host1, như thế này:

scp file dalvarado@host1:.

Sau đó làm điều này để đưa nó đến host2:

ssh -t dalvarado@host1 'scp file dalvarado@host2:.'

Các -ttùy chọn để sshlực lượng nó để phân bổ một pseudo-thiết bị đầu cuối, có thể làm cho nó dễ dàng hơn cho scptrên host1 để nhắc bạn cho một cụm từ mật khẩu / mật khẩu. Nếu bạn có ssh-agent đang chạy và được định cấu hình ở mọi nơi, bạn không nên được nhắc nhập cụm mật khẩu / mật khẩu.

Tôi cung cấp giải pháp thay thế này, bởi vì nếu bạn đã sử dụng một đường hầm, bạn vẫn cần hai lệnh: một để thiết lập đường hầm và một để sao chép tệp thông qua nó. Điều này có vẻ đơn giản hơn.


Giải pháp tuyệt vời !!!
Riccardo
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.