Unix là một trong những hệ điều hành mạnh nhất. Trong các hệ điều hành dựa trên Unix, chúng ta có thể sử dụng SCP [Giao thức sao chép an toàn] [sử dụng lệnh SCP] để sao chép an toàn các tệp và thư mục từ máy chủ này sang máy chủ khác từ xa mà không cần bắt đầu phiên FTP hoặc thậm chí đăng nhập rõ ràng vào bất kỳ hệ thống từ xa nào
Trong hướng dẫn này, bạn sẽ tìm hiểu về các thao tác đơn giản sẽ triển khai Giao thức sao chép an toàn để truyền và quản lý tệp
Giao thức sao chép an toàn [SCP] là gì?
Giao thức sao chép an toàn [SCP] là một giao thức hỗ trợ tải lên hoặc tải xuống dữ liệu hoặc tệp một cách an toàn đến và từ bất kỳ hệ thống từ xa nào. Lệnh scp giúp sử dụng SSH để truyền dữ liệu. Trong quá trình này, nó yêu cầu mật khẩu hoặc cụm mật khẩu giúp xác thực quy trình
SCP cũng mã hóa tệp và mật khẩu được trao đổi để xác thực vì bất kỳ kẻ độc hại nào nếu rình mò vào mạng sẽ không thể đọc hoặc giải mã các tệp hoặc dữ liệu. Lệnh SCP chạy trên cổng số 22
Nó sử dụng giao thức kiểm soát tốc độ [RCP] để truyền tệp và giao thức SSH để hiển thị xác thực & mã hóa. Vì vậy, SCP là sự pha trộn của hai giao thức
cú pháp
scp [options] user_name1@source_host:directory1 / file_name1 user_name2@destination_host:directory2 / file_name2
ở đâu, tên người dùng1@source_host. thư mục1/tên_tệp1 chỉ định vị trí tệp nguồn, bao gồm các mục sau
- Đó là tên tài khoản trên máy chủ [user_name1]
- Tên máy chủ xác định tên máy tính chứa tệp nguồn của bạn [source_host]
- Tên thư mục xác định vị trí thư mục chứa tệp nguồn [thư mục 1]
- Điều này [file_name1] xác định tên tệp của tệp nguồn
Tạo thư mục bằng cách tải xuống tệp hoặc thư mục bằng SCP
Nếu muốn sử dụng giao thức sao chép an toàn để tải xuống bất kỳ tệp nào từ máy chủ từ xa về máy cục bộ của mình, thì bạn phải sử dụng lệnh trong thiết bị đầu cuối cùng với cờ -r. Nó sẽ yêu cầu lệnh scp sao chép đệ quy tất cả nội dung thư mục vào máy cục bộ của bạn
$scp -r userName@ssh.example.com:/path/to/remote/sourceLoc /path/to/local/destinationLoc
Cách sử dụng này quá đơn giản phải không nào.
Cờ -r này được sử dụng làm cây thư mục có thể di chuyển đệ quy từng tệp trong thư mục đó và tải xuống những tệp mà nó gặp phải.
Nếu thư mục nguồn không tồn tại ở vị trí đích đã đề cập trên máy chủ, lệnh sẽ tạo một thư mục. Tuy nhiên, nếu đường dẫn đích không tồn tại, bạn sẽ gặp phải lỗi hoặc sự cố và điều này có thể dẫn đến lệnh scp dự kiến không thành công.
Tải lên một thư mục bằng SCP
Kỹ thuật tải lên cũng sử dụng cơ chế tương tự như kỹ thuật tải xuống. Sự khác biệt duy nhất mà bạn có thể nhận thấy là thư mục nguồn trong lệnh thực tế
Có, chúng tôi phải chỉ định thư mục nguồn bằng một lệnh thực tế cụ thể
Bây giờ chúng ta hãy lấy một ví dụ về mã sử dụng lệnh scp để tải lên một thư mục
$scp -r /path/to/local/sourceLoc userName@ssh.domainPath.com:/path/to/remote/destinationLoc
Ở đây bạn đã thấy rằng đường dẫn nguồn [sourceLoc] đến trước. Điều này giả định rằng nó đang đề cập đến thư mục máy cục bộ của bạn. Sau đó, nó được gán đệ quy cho máy đích bằng cách sử dụng cờ -r, theo cách bạn đã làm trước đây
Phần kết luận
Nếu bạn muốn biết thêm về lệnh scp, bạn có thể gõ lệnh
"người đàn ông scp"
trong thiết bị đầu cuối của bạn để kiểm tra các tài liệu về từng lệnh và cú pháp của nó. Lệnh này là một trong những cách đơn giản và an toàn [được mã hóa] để truyền dữ liệu từ xa giữa các máy. Ngoài việc tạo một thư mục, tải lên và tải xuống các tệp thông qua nó, người dùng cũng có thể sử dụng SCP trong công cụ Putty [] để tạo liên lạc an toàn, truyền tệp từ xa, v.v.
Cách dễ nhất để sao chép tệp từ máy chủ này sang máy chủ khác qua ssh là sử dụng lệnh scp. Để gọi scp, bạn cần mô-đun quy trình con.
ví dụ
import subprocess p = subprocess.Popen[["scp", "my_file.txt", "username@server:path"]] sts = os.waitpid[p.pid, 0]
Bạn cần lệnh gọi waitpid để đợi quá trình sao chép hoàn tất
Một giải pháp khác là mở kết nối ssh và sử dụng mô-đun scp.
ví dụ
from paramiko import SSHClient from scp import SCPClient ssh = SSHClient[] ssh.load_system_host_keys[] ssh.connect['user@server:path'] with SCPClient[ssh.get_transport[]] as scp: scp.put['my_file.txt', 'my_file.txt'] # Copy my_file.txt to the server