Hướng dẫn dễ dàng giúp bạn chuyển tệp sang hệ thống từ xa từ hệ thống Linux của bạn bằng lệnh scp.
SCP là viết tắt của 'Bản sao Bảo mật'. scp
là một tiện ích dòng lệnh được cung cấp bởi Linux, cho phép chuyển các tệp và thư mục từ máy này sang máy khác qua một mạng không an toàn.
Nếu bạn muốn sao chép tệp từ hệ thống này sang hệ thống khác, thì đây scp
có thể là một lựa chọn rất tốt để thực hiện chuyển tệp và thư mục một cách an toàn. Khi hai máy giao tiếp được kết nối qua cùng một mạng, thì việc sử dụng scp
trở nên khả thi.
Bạn hoàn toàn có thể tin tưởng vào scp
lệnh để bảo mật và toàn vẹn vì tệp đang được chuyển và mật khẩu được sử dụng để chuyển đều được mã hóa. Không có thông tin nhạy cảm nào sẽ được tiết lộ ngay cả khi bất kỳ ai cố gắng rình mò lưu lượng truy cập trong khi quá trình chuyển giao này đang diễn ra.
Trong hướng dẫn này, chúng ta sẽ thấy các ví dụ khác nhau về scp
lệnh. Chúng ta cũng sẽ xem xét một số tùy chọn thường được sử dụng với scp
lệnh.
Bắt đầu với lệnh scp
Sử dụng scp
lệnh, bạn có thể chuyển tệp / thư mục:
- Từ máy cục bộ của bạn đến một máy từ xa.
- Giữa hai máy từ xa.
- Từ một máy từ xa đến máy cục bộ của bạn.
Cú pháp chung:
scp [Option] [source_file_name] [[email protected]_Host]:destination_folder
Hãy để chúng tôi hiểu từng thuộc tính cơ bản của lệnh này.
- [source_file_name] Đây là tệp nguồn mà bạn muốn sao chép.
- [ [email protected] _Host] Đây là tên người dùng của hệ thống từ xa nơi bạn muốn sao chép tệp. Địa chỉ IP của máy từ xa cũng được sử dụng trong thuộc tính này sau
@
biểu tượng ''.
- [target_folder] Đây là thư mục mà bạn muốn lưu tệp đã sao chép.
Lưu ý::
Biểu tượng dấu hai chấm ( ) được sử dụng trong cú pháp vì nó phân biệt giữa các vị trí cục bộ và từ xa. Chúng tôi sử dụng dấu hai chấm ( :
) với hệ thống từ xa để chỉ định thư mục mà các tệp sẽ được sao chép vào. Trong trường hợp chúng tôi không chỉ định thư mục đích, thì các tệp sẽ được sao chép vào thư mục chính của người dùng hệ thống từ xa.
Các tùy chọn được sử dụng với scp
Một số tùy chọn phổ biến nhất được sử dụng với scp
lệnh được liệt kê bên dưới.
Lựa chọn |
Sự miêu tả |
-C |
cho phép nén tệp được chuyển |
-v |
đưa ra đầu ra dài dòng |
-r |
sao chép các tệp và thư mục một cách đệ quy |
-p |
bảo toàn quyền, chế độ và thời gian truy cập tệp |
-P |
thay đổi cổng mặc định được sử dụng bằng scp lệnh |
Các tùy chọn thường được sử dụng với lệnh scp
Chúng ta sẽ xem thêm các ví dụ về các tùy chọn này trong phần hướng dẫn.
Sao chép tệp từ cục bộ sang hệ thống từ xa
scp
cho phép bạn chuyển tệp từ hệ thống cục bộ của mình sang hệ thống từ xa bằng cú pháp sau. Điều này cho phép bạn chuyển hoặc tải các tệp của mình lên một máy chủ được đặt từ xa.
Cú pháp chung:
scp [file_name] [email protected]:[destination_folder]
Thí dụ:
scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
Trong ví dụ này, chúng tôi đang sao chép tệp 'apache-tomcat-9.0.8.tar.gz' từ hệ thống cục bộ sang hệ thống từ xa có địa chỉ IP là '143.110.178.221'.
Trên hệ thống từ xa, tệp sẽ được sao chép vào thư mục có tên 'gaurav'.
Đầu ra:
[email protected]:~$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
[email protected]'s password:
apache-tomcat-9.0.8.tar.gz 100% 9589KB 79.8KB/s 02:00
[email protected]:~$
Hãy để chúng tôi kiểm tra đầu ra trên hệ thống từ xa cho tệp.
[email protected]:~/gaurav# ls
apache-tomcat-9.0.8.tar.gz
[email protected]:~/gaurav#
Như vậy, tệp đã được sao chép thành công vào hệ thống từ xa bằng scp
lệnh.
Sao chép nhiều tệp vào hệ thống từ xa
Trong ví dụ trước, chúng ta đã học cách chuyển một tệp đến hệ thống từ xa bằng scp
lệnh. Bây giờ chúng ta sẽ thấy phương pháp chuyển nhiều tệp từ hệ thống cục bộ của bạn sang hệ thống từ xa bằng lệnh này.
Cú pháp chung:
scp [file 1] [file 2] [file n] [email protected]_host:[specific directory]
Hãy để chúng tôi hiểu quy trình đơn giản này với một ví dụ.
Thí dụ:
scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
Ở đây, nhiều tệp được đề cập trong lệnh sẽ được sao chép trên hệ thống từ xa.
Đầu ra:
[email protected]:~$ scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
[email protected]'s password:
ath.html 100% 199KB 94.7KB/s 00:02
abc.txt 100% 0 0.0KB/s 00:00
ppa-purge_0.2.8+bzr56_all.deb 100% 4360 42.2KB/s 00:00
[email protected]:~$
Trên hệ thống từ xa:
[email protected]:~/gaurav# ls -l
total 9800
-rw-r--r-- 1 root root 0 Oct 5 08:58 abc.txt
-rw-r--r-- 1 root root 9818695 Oct 5 08:35 apache-tomcat-9.0.8.tar.gz
-rw-r--r-- 1 root root 204057 Oct 5 08:58 ath.html
-rw-r--r-- 1 root root 4360 Oct 5 08:58 ppa-purge_0.2.8+bzr56_all.deb
[email protected]:~/gaurav#
Tất cả ba tệp hiện đã được sao chép trên hệ thống từ xa.
Sao chép một thư mục vào hệ thống từ xa
Bạn có thể sử dụng scp
lệnh để sao chép một thư mục từ hệ thống cục bộ của mình sang hệ thống từ xa. Quá trình này tương tự như quá trình sao chép một tập tin. Để sao chép nội dung của thư mục, bạn có thể sử dụng -r
tùy chọn bằng scp
lệnh.
Các -r
tùy chọn được sử dụng để sao chép một thư mục đệ quy. Điều đó có nghĩa là, tất cả thư mục con và các tệp bên trong thư mục cũng sẽ được sao chép.
Cú pháp chung:
scp -r [directory path] [email protected]_host:[target_directory]
Thí dụ:
scp -r PycharmProjects [email protected]:gaurav
Đầu ra:
[email protected]:~$ scp -r PycharmProjects [email protected]:gaurav
[email protected]'s password:
__main__.py 100% 623 7.8KB/s 00:00
__init__.py 100% 23 0.4KB/s 00:00
completion.py 100% 2929 28.1KB/s 00:00
search.py 100% 4728 38.7KB/s 00:00
uninstall.py 100% 2963 32.5KB/s 00:00
hash.py 100% 1681 21.3KB/s 00:00
check.py 100% 1430 16.8KB/s 00:00
configuration.py 100% 7125 50.4KB/s 00:00
show.py 100% 6289 49.8KB/s 00:00
download.py 100% 6623 48.2KB/s 00:00
[email protected]:~$
Sử dụng -r
tùy chọn với scp
lệnh sao chép tất cả các thư mục con và tệp trong thư mục từ máy cục bộ sang hệ thống từ xa.
Hiển thị thông tin chi tiết về quy trình scp
Bạn có thể sử dụng tùy chọn -v
(chữ thường v
) để hiển thị thông tin về các tệp đang được sao chép trên điều khiển từ xa hoặc hệ thống cục bộ của bạn. Loại đầu ra này còn được gọi là đầu ra dài dòng.
Khi tùy chọn này được sử dụng, thông tin gỡ lỗi đầy đủ về tệp được hiển thị trên màn hình.
Cú pháp chung:
scp -v [file_name] [email protected]_host:
Thí dụ:
scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Đầu ra:
[email protected]:~$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Executing: program /usr/bin/ssh host 159.89.170.11, user root, command scp -v -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/gaurav/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 159.89.170.11 [159.89.170.11] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/gaurav/.ssh/id_rsa type -1
apache-tomcat-9.0.8.tar.gz 100% 9589KB 99.8KB/s 01:36
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 9826736, received 4016 bytes, in 97.2 seconds
Bytes per second: sent 101133.9, received 41.3
debug1: Exit status 0
[email protected]:~$
Tại đây, trong đầu ra, bạn có thể thấy rằng thông tin gỡ lỗi của tệp đang được hiển thị trên thiết bị đầu cuối của bạn khi scp
lệnh được sử dụng với -v
tùy chọn.
Truyền tệp giữa hai máy chủ từ xa
Linux cho phép bạn kết nối với nhiều máy chủ từ xa. Bạn có thể chuyển các tệp và thư mục giữa hai máy chủ lưu trữ điều khiển từ xa bằng scp
lệnh.
Cú pháp chung:
scp [email protected]_1:/[file_name] [email protected]_2:[folder_to_save]
The syntax may seem a bit wider but is pretty simple. Here, the the first part of the command gives the input about the remote user from where the file is to be copied. colon (:) and /
is used to specify the file name or the directory name which is to be transferred between the two remote machines.
The second part gives information about the target remote system where the file is to be copied.
Example:
scp -r [email protected]:gaurav [email protected]:/team
Here, we will be copying a directory named ‘gaurav’ recursively from the local system to a remote system. The file will be copied to a folder ‘team’ on the remote system.
Output:
[email protected]:~$ scp -r [email protected]:/gaurav [email protected]:/team
[email protected]'s password:
1.py 100% 134 261.3KB/s 00:00
variables.py 100% 377 949.2KB/s 00:00
abc.txt 100% 0 0.0KB/s 00:00
ath.html 100% 199KB 41.8MB/s 00:00
[email protected]:~$
Here, we used the scp
command on the local system to transfer a directory named ‘gaurav’ from one remote server to another.
Transfer files from the remote system to your local system
Bạn có thể dễ dàng chuyển các tệp hoặc thư mục từ hệ thống từ xa sang hệ thống cục bộ của mình bằng scp
lệnh. Nói cách đơn giản hơn, bạn có thể tải xuống nhiều tệp hoặc thư mục từ máy chủ từ xa vào hệ thống cục bộ của mình bằng scp
lệnh.
Cú pháp chung:
scp [email protected]_host:/files/file.txt /[folder_of_local_system]
Đầu ra:
[email protected]:~$ scp [email protected]:how.txt .
[email protected]'s password:
how.txt 100% 11 0.1KB/s 00:00
[email protected]:~$
Tại đây, tôi đã tải xuống (sao chép) tệp từ máy chủ từ xa vào thư mục chính của mình. Do đó, tôi đã sử dụng dấu chấm ( .
) để chỉ định trong lệnh sao chép tệp vào thư mục chính của mình.
Đầu ra mẫu:
[email protected]:~$ ls -l how.txt
-rw-r--r-- 1 gaurav gaurav 11 Oct 6 09:49 how.txt
[email protected]:~$
Ở đây, tệp hiện đã được sao chép vào thư mục chính của tôi từ máy chủ từ xa.
Theo cách tương tự, bạn có thể tải xuống nhiều tệp hoặc thư mục từ máy chủ từ xa bằng scp
lệnh với các tùy chọn thích hợp.
Nén tệp để truyền nhanh hơn
Đôi khi, việc chuyển các tệp lớn có thể tốn nhiều thời gian. Vấn đề này có thể được giải quyết trong khi sử dụng scp
lệnh với tùy chọn -C
(chữ hoa C
).
Sử dụng -C
tùy chọn này, nén các tệp có kích thước lớn hơn để tạo điều kiện truyền nhanh hơn và do đó tiết kiệm thời gian.
Một thực tế thú vị về tùy chọn này là, tệp được sao chép với kích thước ban đầu của nó trên hệ thống đích nhưng trong quá trình truyền, kích thước được nén để cho phép truyền nhanh hơn. Do đó, việc nén chỉ được thực hiện trên mạng.
Cú pháp chung:
scp -C [file_name] [email protected]_host:[target_folder]
Hãy để chúng tôi xem một ví dụ so sánh để hiểu sự khác biệt.
Chuyển không có tùy chọn -C:
[email protected]:~$ scp -rv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7516504, received 4008 bytes, in 74.6 seconds
Bytes per second: sent 100693.7, received 53.7
debug1: Exit status 0
[email protected]:~$
Từ kết quả ở trên, chúng ta có thể thấy rằng thời gian cần thiết để truyền là 74,6 giây. Chúng tôi sẽ thử chuyển cùng một tệp bằng tùy chọn -C và quan sát sự khác biệt.
Chuyển với tùy chọn -C:
[email protected]:~$ scp -Crv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
.
.
webupload.img 100% 1834KB 98.7KB/s 00:18
Sending file modes: C0664 1877552 router.img
Sink: C0664 1877552 router.img
router.img 100% 1834KB 100.3KB/s 00:18
Sink: E
Sending file modes: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
Sink: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
DSL-2750U-Release-IN-T-01.00.07.zip 100% 3666KB 218.5KB/s 00:16
Sink: E
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7518864, received 3828 bytes, in 51.0 seconds
Bytes per second: sent 100245.4, received 51.0
debug1: Exit status 0
debug1: compress outgoing: raw data 7511925, compressed 7513136, factor 1.00
debug1: compress incoming: raw data 1467, compressed 999, factor 0.68
[email protected]:~$
Ở đây, chúng ta có thể dễ dàng nhận thấy rằng việc sử dụng -C
tùy chọn với scp
lệnh đã cho phép chúng ta nén tệp qua mạng, do đó chứng tỏ đây là một tùy chọn tiết kiệm thời gian.
Sử dụng một cổng ssh khác để truyền tệp
Trong khi sử dụng scp
lệnh, cổng mặc định được triển khai là port 22
. Người dùng có quyền tự do tùy chỉnh lựa chọn cổng này. Bạn có thể sử dụng -P
(tùy chọn P viết hoa) với scp
lệnh để sử dụng cổng bạn chọn.
Cú pháp chung:
cp -P [new_port_number] [file_name/directory_name] [email protected]:[destination_folder]
Thí dụ:
scp -P 4248 dlink [email protected]:team
Sử dụng lệnh trên, tệp sẽ được chuyển đến máy chủ từ xa. Nhưng lần này, cổng được sử dụng sẽ là cổng port 4248
mặc định port 22
.
Phần kết luận
Sau khi xem qua hướng dẫn này, chúng ta đã tìm hiểu về bản chất động của scp
lệnh được sử dụng để chuyển hoặc sao chép tệp từ hệ thống này sang hệ thống khác. Tùy chọn này cũng có thể được sử dụng để tải xuống tệp hoặc thư mục từ máy chủ từ xa. Do đó, chúng ta có thể kết luận rằng scp
lệnh tỏ ra rất hữu ích cho việc truyền tệp khi bạn phải xử lý đồng thời nhiều hệ thống cũng như các máy chủ từ xa.