Tôi có một loạt các tệp phần mềm được tải xuống thư mục con ~/Downloads
trên máy tính cá nhân của mình. Tôi cũng đang sử dụng bash để kết nối từ xa với máy tính ssh
.
Có thể chuyển tập tin này qua ssh
máy tính từ xa không?
Tôi có một loạt các tệp phần mềm được tải xuống thư mục con ~/Downloads
trên máy tính cá nhân của mình. Tôi cũng đang sử dụng bash để kết nối từ xa với máy tính ssh
.
Có thể chuyển tập tin này qua ssh
máy tính từ xa không?
Câu trả lời:
Bạn có thể muốn sử dụng scp
cho mục đích này. Đây là một phương tiện an toàn để truyền tệp bằng giao thức SSH.
Ví dụ: để sao chép một tệp có tên yourfile.txt
từ ~/Downloads
máy tính từ xa, hãy sử dụng:
scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
Bạn có thể xem thêm ví dụ ở đây .
rsync
có thể cũng hoạt động tốt, bây giờ tôi nghĩ về nó
scp
ở trên bằng rsync
và nó sẽ hoạt động tốt.
rsync
cho tất cả mọi thứ, ngay cả các tệp đơn lẻ, vì nó "chỉ hoạt động" trong các trường hợp đơn giản và có thể hiệu quả hơn nhiều trong các trường hợp khác. Nếu sử dụng một trong hai scp
hoặc rsync
trên bất cứ điều gì chưa nén và / hoặc mã hóa, hãy nhớ bật tùy chọn nén trên ( -C
cho scp
, -z
hoặc --compress
cho rsync
). Trên thực tế, tôi bật nó theo thói quen - rất hiếm khi bạn gặp tình huống khiến mọi thứ chậm lại (có lẽ nếu bạn đang sử dụng thiết bị năng lượng thấp chậm với công suất CPI hạn chế như rPi).
Mặc dù scp
rõ ràng là công cụ phù hợp cho việc này, nhưng vì lý do nào đó bạn không thể sử dụng nó, bạn có thể làm một cái gì đó như sau từ máy cục bộ của mình để sao chép, giả sử, một cấu trúc thư mục vào máy từ xa:
tar -c . | ssh <remote> tar -x
Đây sẽ tar
là thư mục hiện tại trên máy cục bộ và ghi rằng thư tar
mục stdout
đó sẽ được dẫn tới một ssh
lệnh trong đó nó sẽ thực thi một lệnh từ xa để gỡ bỏ tệp mà nó đọc từ đóstdin
Được chỉnh sửa để phản ánh nhận xét của Dietrich Epp về -f -
việc mặc định trên cả kết thúc tạo và trích xuất, do đó không cần thiết phải chỉ định rõ ràng.
-C basedir
đối số tar
để trích xuất ở đâu đó ngoài thư mục chính của bạn nếu bạn đang làm điều này.
Nếu bạn muốn làm điều này nhiều hơn dịp hiếm hoi, tôi khuyên bạn nên gắn hệ thống tập tin từ xa sshfs
nếu bạn đang sử dụng một Unix giống như hỗ trợ FUSE (Linux, * BSD, Mac OS X). Tạo một thư mục trong thư mục chính của bạn, giả sử, được gọi là ~ / remote-server:
$ mkdir ~/remote-server
Sau đó gắn hệ thống tập tin từ xa với sshfs
. Thay thế "mineerver.com" bằng tên máy chủ của máy từ xa và "tên thư mục từ xa" bằng thư mục bạn đang sử dụng trên hệ thống từ xa.
$ sudo sshfs username@yourserver.com:/name/of/remote/directory ~/remote-server/
Khi điều này được thực hiện, thư mục từ xa là một phần của hệ thống tệp của bạn và bạn có thể sử dụng tất cả các công cụ bình thường của mình trên đó, bao gồm cp
:
$ cp ~/Downloads/your-files ~/remote-server
Nếu bạn chưa sshfs
cài đặt, bạn sẽ có thể cài đặt nó trên máy tính của mình bằng trình quản lý gói của bạn (tìm các gói có tên sshfs
hoặc fuse-sshfs
). Để biết thêm thông tin, bạn có thể đọc một hướng dẫn trực tuyến .
Nhân tiện, đây là cách quản lý tập tin yêu thích của tôi trên các máy chủ từ xa. Tôi thường giữ một máy chủ sản xuất và hai máy chủ phát triển được gắn theo cách này và sử dụng quy trình duyệt tệp thông thường của tôi với chúng.
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
và -C
để nén nếu băng thông kém. Ngay khi nó hoạt động tốt, cá nhân tôi thêm các bí danh cho các lệnh để nhanh chóng gắn kết các hệ thống tập tin xa trên ssh. @Benjamin_Staton Tôi sẽ không sử dụng sudo hoặc root ở đây, không phải không có ánh xạ nhóm / người dùng phù hợp.
Lần đầu tiên, không có sự khác biệt thực sự giữa scp
(sao chép ssh
) và rsync
.
Các lần chạy tiếp theo sẽ được hưởng lợi bởi rsync không sao chép các tệp đã tồn tại.
rsync -avH ~/Downloads username@remotehost:Downloads
-a
cho tất cả các tập tin-v
cho dài dòng-H
cho "chỉ cần tìm ra các liên kết tượng trưng và làm điều đúng đắn"Các cờ hữu ích khác bao gồm:
--delete
để xóa các tệp ở đích không còn tồn tại trên nguồn.--dry-run
để thử nghiệm - rất tiện dụng khi kết hợp với --delete
.Điều này cũng sẽ sử dụng ssh
các khóa để thực hiện đăng nhập không mật khẩu, nếu bạn đã thiết lập chúng.
Khi kết thúc quá trình chạy, rsync
sẽ cho bạn biết nó đã nhanh hơn bao nhiêu lần so với việc sao chép lại một lần nữa.
-H
thực sự là đối với các liên kết cứng, nó dừng cùng một nội dung được gửi hai lần trở lên khi được liên kết vào nhiều nơi trong cấu trúc thư mục nguồn (nhưng có thể làm cho quá trình kém hiệu quả hơn đối với các cấu trúc thư mục lớn). nó không có tác dụng đối với các liên kết tượng trưng, nhưng một số tùy chọn được bao gồm bởi -a
/ --archive
do ảnh hưởng đến cách xử lý các liên kết tượng trưng.
Để thêm vào câu trả lời trên. Đôi khi tôi không chắc chắn chính xác về con đường từ xa. Trong những trường hợp này, sftp
trước tiên tôi sử dụng để điều hướng đến vị trí được yêu cầu, sau đó sử dụng get hoặc put để thực sự tải xuống hoặc tải lên một tệp.
Nếu bạn cũng muốn giữ một cái gì đó luôn được đồng bộ hóa và thậm chí muốn thực thi cục bộ một số tệp được đặt trên máy từ xa, sshfs
hoạt động rất tốt.
Tôi đang làm một cái gì đó rất giống với ssh. Tôi đã tạo một công cụ xây dựng tùy chỉnh cho Visual Studio và về cơ bản là có VS chạy lệnh ssh sao chép mã của tôi vào máy tính mục tiêu và sau đó biên dịch nó trên máy tính mục tiêu đó.
ssh userB @ hostB 'cp /network/path/of/source/file.ext /path/of/final/file.ext; ./runCustomCommand '
Lưu ý việc sử dụng dấu ngoặc đơn và dấu chấm phẩy. Cái trước đóng gói các lệnh của bạn đến hostB thông qua ssh và cái sau cho phép bạn chạy nhiều lệnh hệ thống hostB trong một lệnh ssh từ hostA.
Để thực hiện công việc này, bạn sẽ cần thiết lập các khóa ssh trên máy bắt đầu để bạn có thể là userA @ hostA và đăng nhập vào hostB dưới dạng userB. Quá trình tạo khóa ssh công khai cho userA @ hostA được ghi lại rõ ràng. Nếu bạn không tạo khóa công khai trên hostA cho userA và sao chép khóa đó vào hostB dưới dạng userB, thì bạn sẽ buộc phải nhập mật khẩu của mình mỗi lần - điều này phá hỏng niềm vui tự động hóa.
this file
) và nhiều tệp (a series of software files
), giải pháp tốt nhất phụ thuộc vào việc bạn có một tệp đơn hay nhiều tệp.