Linux 之 遠端拷貝 scp
- 一、 總覽
- 二、 伺服器之間的免密登入設定
-
- 2.1 在 A 伺服器上生成公鑰密鑰檔案
- 2.2 将 A 伺服器的公鑰放到 B 伺服器的 authorized_keys 中
- 三、 使用 scp 進行遠端拷貝
-
- 3.1 本地複制到遠端
- 3.2 遠端複制到本地
一、 總覽
工作過程中總會涉及到兩台或多台 Linux 伺服器之間的檔案遠端拷貝操作, 使用 Linux 系統本身自帶的指令 scp 是大家常用的一種方式。
通常我們會設定兩台伺服器之間的免密登入, 然後再使用 scp 指令進行遠端檔案傳輸。
二、 伺服器之間的免密登入設定
兩個伺服器 A 和 B 之間想要設定免密登入, 需要将 A 伺服器的公鑰放到 B 伺服器的 authorized_keys 檔案中即可。 具體如下:
2.1 在 A 伺服器上生成公鑰密鑰檔案
在 A 伺服器上使用
ssh-keygen
指令, 然後一路回車就會在 A 伺服器上生成對應的公鑰檔案、 密鑰檔案。
[[email protected] .ssh]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:6xx62QElT6bLZkjptTy3Oh0KyYWlHuSJS0JuE7ZyqRA [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| . |
|E= . o |
|B.A.o |
|=%oo o |
|O=+ . = K |
|=o o+.o . |
| . +.O+.. |
| + *+*o . |
| .+* o.. |
+----[SHA256]-----+
[[email protected] .ssh]$
見到這個方塊就說明我們已經成功的生成了本伺服器的公鑰檔案和密鑰檔案。
我們可以檢視下:
[[email protected] .ssh]$ cd ~/.ssh
[[email protected] .ssh]$ ll
total 12
-rw------- 1 ec2-user ec2-user 794 Oct 29 2019 authorized_keys
-rw------- 1 ec2-user ec2-user 1679 Aug 21 08:11 id_rsa
-rw-r--r-- 1 ec2-user ec2-user 432 Aug 21 08:11 id_rsa.pub
[[email protected] .ssh]$
我們可以看到, 在
~/.ssh
的目錄下新生成了
id_rsa
和
id_rsa.pub
兩個檔案(
authorized_keys
是之前生成的), 其中
id_rsa
檔案就是密鑰檔案, 需要保密的, 而
id_rsa.pub
是公鑰檔案。
2.2 将 A 伺服器的公鑰放到 B 伺服器的 authorized_keys 中
将 A 伺服器的公鑰複制出來, 然後複制到 B 伺服器的
~/.ssh/authorized_keys
檔案中, 儲存即可:
[[email protected] .ssh]$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCddokAi/peU4Mn96s0tGdXOct2NyGnmZ5Krx7seHQvz+/iYdPUl5OSVtei+DPT7bEewUypC971pWKVSlL+qoZgzj55g9TABCTRIu8Fm+0tcZ9U234wUnH+4X17ErciEknduBcAdAiA0eRdaPl6ew5Q57ZN5Xb8v9m1z7/9fGDAr4CHlCDiWCC9DGxHXDa0NCXiamdK+9MYSZaE2VCKfv1kjKll+F45j57Dylc+MaTS/KNT5eSUxwecR/ [email protected]
[[email protected] .ssh]$
将上面的公鑰複制, 然後粘貼到 B 伺服器上的
~/.ssh/authorized_keys
檔案中即可。
此時, 我們就可以在 A 伺服器上, 通過 scp 指令去 B 伺服器上 “取” 檔案或者将檔案 “放” 到 B 伺服器上。
【另】設定好之後, 可以在 A 伺服器上直接使用 ssh 後接 B 伺服器位址的指令, 無需密碼直接連接配接到 B 伺服器上。
三、 使用 scp 進行遠端拷貝
scp 的文法:
scp [可選參數] file_source file_target
其中, 參數可選為:
項目 | Value |
---|---|
-1 | 強制scp指令使用協定ssh1 |
-2 | 強制scp指令使用協定ssh2 |
-4 | 強制scp指令隻使用IPv4尋址 |
-6 | 強制scp指令隻使用IPv6尋址 |
-B | 使用批處理模式(傳輸過程中不詢問傳輸密碼或短語) |
-C | 允許壓縮。(将-C标志傳遞給ssh,進而打開壓縮功能) |
-p | 保留原檔案的修改時間,通路時間和通路權限。 |
-q | 不顯示傳輸進度條。 |
-r | 遞歸複制整個目錄。 |
-v | 詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的調試資訊。這些資訊用于調試連接配接,驗證和配置問題。 |
-c cipher | 以cipher将資料傳輸進行加密,這個選項将直接傳遞給ssh。 |
-F ssh_config | 指定一個替代的ssh配置檔案,此參數直接傳遞給ssh。 |
-i identity_file | 從指定檔案中讀取傳輸時使用的密鑰檔案,此參數直接傳遞給ssh。 |
-l limit | 限定使用者所能使用的帶寬,以Kbit/s為機關。 |
-o ssh_option | 如果習慣于使用ssh_config(5)中的參數傳遞方式, |
-P port | 注意是大寫的P, port是指定資料傳輸用到的端口号 |
-S program | 指定加密傳輸時所使用的程式。此程式必須能夠了解ssh(1)的選項 |
3.1 本地複制到遠端
scp local_file [email protected]_ip:remote_folder
或者
scp local_file [email protected]_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
如:
scp ./a.txt [email protected]:/home/ec2-user/software/
将本地的
a.txt
檔案 “放” 到遠端伺服器
10.8.122.114
的
/home/ec2-user/software/
路徑下。
3.2 遠端複制到本地
隻需要将
3.1 本地複制到遠端
中的參數互換位置即可。
如:
scp [email protected]:/home/ec2-user/software/jjjj.txt ./
将遠端
10.8.122.114
伺服器的
/home/ec2-user/software/jjjj.txt
檔案 “取” 回來放到本伺服器的目前路徑下。