Làm cách nào tôi có thể tiếp tục chuyển tập tin scp lớn khi sử dụng chuyển tiếp cổng?


10

Tôi có một máy cách xa một vài bước và tôi cần thiết lập chuyển tiếp cổng để truyền tệp.

Chỉnh sửa: Để rõ ràng, nhiều bước nhảy là cần thiết để truy cập vào máy từ xa. Từ máy của tôi, tôi thiết lập VPN, nơi tôi có thể truy cập 10.255.xx - đó là máy duy nhất tôi có thể kết nối qua VPN. Sau khi đăng nhập vào .xx, sau đó tôi có thể kết nối với các máy khác - .yy là một trong số đó.

Từ máy của tôi:

ssh -L 4567:localhost:4567 me@10.255.x.x

Rồi từ cái máy đó:

ssh -L 4567:localhost:22 me@10.255.y.y

Tôi có thể

scp -P 4567 me@localhost:/path/to/large/file.gz .

Tôi đã bỏ qua việc này quá mức, chỉ để thấy rằng việc chuyển tiền đã chết vào một lúc nào đó.

Tôi đã thấy một vài gợi ý sử dụng rsync trên ssh để tiếp tục chuyển tiền, nhưng tôi không rõ cách thiết lập điều đó. Điều này có thể không?


Tất cả những bước nhảy này để làm gì? Sẽ không scp me@10.255.x.x:/path/to/large/file.gz .đạt được chính xác như nhau? Phiên bản nào của scp (ssh) được cài đặt trên máy khách và máy chủ?
Dennis

@Dennis: scp không hỗ trợ tiếp tục chuyển khoản - những gì bạn đề xuất sẽ khởi động lại quá trình tải xuống.
chris

Một số phiên bản làm (scp máy tính xách tay của tôi không, VPS của tôi không). Lý do tôi hỏi là vì hoa bia dường như không cần thiết đối với tôi, và việc kết nối mà không có hoa bia sẽ dễ dàng hơn rất nhiều.
Dennis

Câu trả lời này cũng có thể giúp bạn: unix.stackexchange.com/a/43097/14084
Bernhard

Câu trả lời:


9

Với một số phiên bản của scp (phiên bản trên máy tính nguồn dường như là chìa khóa), chỉ cần thực hiện lại lệnh scp là đủ để tiếp tục chuyển. Nhưng hãy cẩn thận! Nếu phiên bản của bạn không hỗ trợ chuyển một phần, tập tin một phần sẽ bị ghi đè.

Các công tắc rsync sau đây rất thuận tiện để tiếp tục chuyển khoản bị hỏng nếu scp không hỗ trợ:

     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -e, --rsh=COMMAND           specify the remote shell to use
     --progress              show progress during transfer

Lệnh

rsync --append-verify --progress --rsh="ssh -p 4567" me@localhost:/path/to/large/file.gz .

nên có hiệu quả mong muốn. Lưu ý rằng công -ptắc phải là chữ thường cho ssh.


Các bước nhảy là cần thiết vì cách cấu hình mạng trên máy chủ đích. Vấn đề với việc sử dụng rsync trên ssh là tôi cần sử dụng cổng cục bộ 4567, tệp không tồn tại trên máy chủ 10.255.xx.
chris

Lỗi của tôi. Tôi đã cho rằng đó 10.255.y.ylà máy tính của khách hàng.
Dennis

Tôi đã cập nhật câu trả lời của mình.
Dennis

và phải làm gì nếu không có cách nào để sử dụng rsync? Trong trường hợp của tôi, tôi chỉ có ftp có sẵn trên máy chủ từ xa.
dr.dimitru

1
@Enzo Câu hỏi là về SCP, câu trả lời cần là về scp. Câu hỏi là về việc chuyển scp không đầy đủ, không phải về công cụ scp. Nó thực sự nói rằng tôi đã thấy một vài gợi ý sử dụng rsync trên ssh để tiếp tục chuyển tiền, nhưng tôi không rõ cách thiết lập điều đó. Điều này có thể không? ở phía dưới
Dennis

2

Sử dụng sftp thay vì scp

Trong trường hợp của bạn:

sftp -a -P 4567 me@localhost:/path/to/large/file.gz .

Từ trang người đàn ông sftp:

-a      Attempt to continue interrupted downloads rather than overwriting existing partial or complete copies of files.  If the remote file contents differ from the partial local copy then the resultant file is likely to be corrupt.

1

rsync sử dụng ssh theo mặc định, bạn có thể phải chỉ định lệnh ssh chính xác bằng cách sử dụng chuyển đổi -e của rsync. Nó cũng có một - một phần nên giữ tệp không đầy đủ xung quanh để nó có thể tiếp tục chuyển.


-1

Tôi thực sự không thể thấy điểm của đường hầm của bạn là gì, vì vậy đây là cách tôi sẽ giải quyết vấn đề của bạn:

ssh -R $tunnelPort:localhost:$localSSHPort $remoteUser@$remoteHost -p $remoteSSHPort

điều này sẽ mở một đường hầm ngược từ máy cục bộ (localhost) đến máy từ xa (remotehost). $ tunPortPort là cổng mà đường hầm sẽ được tìm thấy trên remotehost. $ localSSHPort là cổng mà sshd cục bộ chạy và $ remoteSSHPort là nơi sshd của remotehost lắng nghe.

Bây giờ bạn đang ở trong đường hầm (đảo ngược!), Bạn có thể ít nhiều làm những gì Dennis đề xuất:

rsync --apend-verify -az -e 'ssh -p $tunnelPort' /path/to/large/file $user@localhost:/destination

các cờ -a và -z được giải thích trong trang man của rsync, vì vậy tôi sẽ không giải thích chúng. Điều xảy ra bây giờ là khi bạn chạy rsync trên remotehost như trên, nó sẽ đẩy tất cả dữ liệu vào cổng $ tunPort, sau đó được chuyển tiếp đến sshd $ localSSHPort của localhost.

Hy vọng rằng đã giúp.


@ingenous: Tôi đã thêm một lời giải thích cho các đường hầm.
chris
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.