Làm cách nào để sao chép tệp mà không sử dụng scp trong phiên ssh?


55

Tôi đã đăng nhập vào một hệ thống với ssh và không có scp nào trên cả hai hệ thống. Làm thế nào để sao chép một tập tin mà không cần sử dụng chương trình scp.


Là netcat (nc) có mặt trên cả hai hệ thống? Nếu có, hãy sử dụng phiên ssh của bạn để tạo đường hầm cho cổng TCP và sử dụng nc trên cổng đó.

Bạn có rsynckhông
slhck

3
bạn cũng có thể làm điều này:ssh user@remotehost cat /path/to/remote/file > /path/to/local/file
n. 'đại từ' m.

Yêu cầu báo giá @nm (đối với tôi, máy chủ Ubuntu)
Ivan Black

@nm Không hoạt động đối với tôi - tệp bị hỏng (Tôi đoán thông điệp đăng nhập sẽ phá vỡ nó).
monnef

Câu trả lời:


94

Để gửi một tập tin:

cat file | ssh ajw@dogmatix "cat > remote"

Hoặc là:

ssh ajw@dogmatix "cat > remote" < file

Để nhận tệp:

ssh ajw@dogmatix "cat remote" > copy

20
@ggg điều đó không đúng chút nào. cd /tmp; cat /bin/bash > test; chmod a+x test; diff test /bin/bash; ./testTất cả đều hoạt động tốt. Không có gì vốn là "ma thuật" về các tệp nhị phân. Cả hai tệp trong ví dụ của tôi đều so sánh giống hệt nhau và có cùng một tổng kiểm tra. Đúng là sao chép và dán từ cửa sổ thiết bị đầu cuối sẽ không hoạt động vì những thứ như trình tự điều khiển và ký tự không thể in được, nhưng sử dụng các đường ống như thế này không bao giờ đi gần thiết bị đầu cuối.
Flexo

@Flexo Tôi cần một cái gì đó như thế này, ngoại lệ duy nhất là, tôi cần chuyển tất cả jpg từ một thư mục. Làm thế nào có thể lặp qua / Storage / sdcard1 / * jpg và >đến các tệp có cùng tên?
George Profenza

2
@GeorgeProfenza bạn sẽ cần thêm tarvào hỗn hợp. tar cvf - /path/*.jpg | ssh foo@bar.com "tar xvf -"hoặc một cái gì đó tương tự nên làm việc.
Flexo

Một hàm ý của những gì ggg và Flexo nói ở trên là bạn không thể sử dụng tùy chọn "-t" để ssh.
mjg123

1
Đẹp! Bạn cũng có thể sử dụng pv thay vì con mèo đầu tiên để bạn có được một progressbar, ví dụ:pv file | ssh ajw@dogmatix "cat > remote"
Theolodus

3

Thử đi:

cat myfile.txt | ssh me@otherhost 'cat - > myfile.txt' 

2
không cần nhiều cuộc gọi của mèo cả
Flexo

1

Bạn có thể sử dụng xxdvà một số trích dẫn xấu xí để sao chép trên nhiều tệp cũng như chạy các lệnh trên chúng và thực thi chúng:

ssh -t foo@bar.com "
echo $'"$(cat somefile | xxd -ps)"' | xxd -ps -r > "'somefile'"
chmod +x somefile
echo $'"$(cat someotherfile | xxd -ps)"' | xxd -ps -r > "'someotherfile'"
chmod +x someotherfile
./somefile
./someotherfile
"

à, câu trả lời của tôi rõ ràng là quá l33t
Aric

-1

Bên cạnh việc truyền tệp đến một điều khiển từ xa cat, bạn cũng có thể sử dụng một số máy khách SFTP để chuyển các tệp.


+1 nhưng cần lưu ý rằng OP đang cố gắng tránh scp vì nó không tồn tại trên các hệ thống. Do hạn chế này, cũng có khả năng máy chủ FTP cần tồn tại ở đầu nhận, điều này làm cho quá trình sao chép phụ thuộc vào phần mềm khác với những gì thường có ở đó theo mặc định.
Paul Sasik

-1

python3 -m http.servertrong cùng thư mục với tập tin mong muốn - sau đó bạn có thể curlhoặc wgethoặc tải về một tập tin với trình duyệt của bạn. Lưu ý rằng với lệnh chạy đó, tất cả các tệp của bạn từ thư mục hiện tại sẽ được công khai, cho đến khi bạn nhấn Ctrl+ C.

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.