Linux 命令(30)—— scp 命令
1.簡(jiǎn)介
scp(secure copy)命令是一個(gè)基于 SSH 安全的進(jìn)行遠(yuǎn)程文件拷貝命令,用于在 Linux 下遠(yuǎn)程拷貝文件,和它類似的命令有 cp,不過 cp 只是在本機(jī)進(jìn)行拷貝不能跨服務(wù)器,而且 scp 支持對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密。
2.命令格式
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 ... [[user@]host2:]file2
3.選項(xiàng)說明
-1使用 SSH 協(xié)議版本 1
-2使用 SSH 協(xié)議版本 2
-4使用 ipv4
-6使用 ipv6
-B以批處理模式運(yùn)行,阻止 scp 詢問口令
-C使用壓縮,將 -C 標(biāo)志傳遞給 SSH,從而打開壓縮功能
-c CIPHER使用指定的秘鑰對(duì)傳輸?shù)奈募M(jìn)行加密
-F SSH_CONFIG指定 SSH 配置文件
-i IDENTITY_FILE從指定文件中讀取傳輸時(shí)使用的密鑰,此參數(shù)直接傳遞給 ssh
-l LIMIT指定寬帶限制
-o SSH_OPTION指定使用的 ssh 選項(xiàng),可以使用 SSH_CONFIG 中使用的 ssh 選項(xiàng)
-P PORT指定遠(yuǎn)程主機(jī)的端口號(hào)
-p保留文件的最后修改時(shí)間,最后訪問時(shí)間和權(quán)限模式
-q靜默模式,不顯示復(fù)制進(jìn)度以及來自 ssh 的警告和診斷消息
-r以遞歸方式復(fù)制整個(gè)目錄
-S PROGRAM指定加密傳輸時(shí)所使用的程序。此程序必須能夠理解 ssh 的選項(xiàng)
-v使用冗余模式,使 scp 和 ssh 打印調(diào)試信息以及進(jìn)度
注意事項(xiàng):
(1)scp 返回 0 成功,>0 失敗;
(2)使用 scp 在不同主機(jī)之間進(jìn)行文件傳輸,需要確保兩臺(tái)設(shè)備都開啟了ssh遠(yuǎn)程登錄服務(wù),且兩臺(tái)設(shè)備能互相通信;
(3)使用 scp 命令要確保使用的用戶具有可讀取遠(yuǎn)程服務(wù)器相應(yīng)文件的權(quán)限,否則scp 命令無法起作用。
4.常用示例
(1)遠(yuǎn)程主機(jī)之間,使用 scp 拷貝多個(gè)文件。
方法一:將多個(gè)文件放在同一個(gè)目錄中,使用scp -r來拷貝,參考如下代碼:
scp -r uername@sourceHostName:sourcedir username@destinationHostName:destinationdir
方法二:將多個(gè)文件或者目錄使用tar打包后作為單個(gè)文件傳輸。
方法三:scp支持同時(shí)拷貝多個(gè)文件的功能。
scp file1 file2 remote_username@remote_ip:remote_folder
(2)從本地復(fù)制文件到遠(yuǎn)程。
命令格式:
scp local_file remote_username@remote_ip:remote_folder
# 或
scp local_file remote_username@remote_ip:remote_file
# 或
scp local_file remote_ip:remote_folder
# 或
scp local_file remote_ip:remote_file
第1,2個(gè)指定了用戶名,命令執(zhí)行后需要再輸入密碼,第1個(gè)僅指定了遠(yuǎn)程的目錄,文件名字不變,第2個(gè)指定了文件名;
第3,4個(gè)沒有指定用戶名,命令執(zhí)行后需要輸入用戶名和密碼,第3個(gè)僅指定了遠(yuǎn)程的目錄,文件名字不變,第4個(gè)指定了文件名。
應(yīng)用實(shí)例:
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music
scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3
(3)使用 scp 復(fù)制目錄。
命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
# 或
scp -r local_folder remote_ip:remote_folder
第 1 個(gè)指定了用戶名,命令執(zhí)行后需要再輸入密碼;
第 2 個(gè)沒有指定用戶名,命令執(zhí)行后需要輸入用戶名和密碼。
應(yīng)用實(shí)例:
scp -r /home/space/music/ root@www.runoob.com:/home/root/others/
scp -r /home/space/music/ www.runoob.com:/home/root/others/
上面命令將本地 music 目錄復(fù)制到遠(yuǎn)程 others 目錄下。
(4)從遠(yuǎn)程復(fù)制到本地。
從遠(yuǎn)程復(fù)制到本地,只要將從本地復(fù)制到遠(yuǎn)程的命令的后2個(gè)參數(shù)調(diào)換順序即可,如下實(shí)例
應(yīng)用實(shí)例:
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3
scp -r www.runoob.com:/home/root/others/ /home/space/music/
**說明:**如果遠(yuǎn)程服務(wù)器防火墻有為scp命令設(shè)置了指定的端口,我們需要使用 -P 參數(shù)來設(shè)置命令的端口號(hào),命令格式如下:
#scp 命令使用端口號(hào) 4588
scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator
(5)使用 expect 和 scp 實(shí)現(xiàn)不同主機(jī)之間文件的自動(dòng)傳輸。
腳本如下:
#!/usr/bin/expect
set timeout 5
spawn scp dablelv@172.25.44.22:/yourpath/yourfile root@10.130.89.104:/destinationpath
expect "dablelv@172.25.44.22's password:"
send "123456\n"
expect "root@10.130.89.104's password:"
send "123456\n"
interact eof
腳本解釋:
第一行:#!/usr/bin/expect 指明該腳本由expect來解析。這里的expect其實(shí)和linux下的bash、Windows下的cmd.exe是一類東西,都是可執(zhí)行程序,也可用于腳本的解析器。expect的主要作用是解析自動(dòng)交互的腳本,比如實(shí)現(xiàn)ssh的自動(dòng)登錄,無需手動(dòng)輸入密碼等。
第二行:set timeout 5 用于設(shè)置expect的expect命令的等待時(shí)間為5秒,如果expect等待的值在5秒內(nèi)沒有出現(xiàn)在標(biāo)準(zhǔn)輸出,那么expect腳本繼續(xù)執(zhí)行。expect的默認(rèn)timeout為10s。
第三行:spawn scp dablelv@172.25.44.22:/yourpath/yourfile。spawn是expect的內(nèi)置命令,不是Linux可執(zhí)行程序,使用which spawn 是查不到spawn所在路徑的。這個(gè)就好比cd是shell的內(nèi)建命令,離開shell,就無法執(zhí)行cd一樣。 它主要的功能是給ssh運(yùn)行進(jìn)程加個(gè)殼,用來傳遞交互指令。 它主要的功能是給后面需要執(zhí)行的命令加個(gè)殼,用來傳遞交互指令。
第四行:expect "dablelv@172.25.44.22's password:" expect命令也是expect的內(nèi)建命令,其作用就是等待標(biāo)準(zhǔn)輸出出現(xiàn)指定的值,如果有則立即返回,向下執(zhí)行;否則就一直等待,等待的最長(zhǎng)時(shí)間由上面的set timeout來指定。
第五行:send "123456\n"就是在expect等待到指定的值之后向標(biāo)準(zhǔn)輸出發(fā)送的值,這里就是執(zhí)行交互動(dòng)作,與手工輸入密碼的動(dòng)作等效。效果上跟用戶手動(dòng)在終端上輸入123456之后敲一個(gè)回車一樣。
第六、七行實(shí)現(xiàn)的功能同第五六行,因?yàn)閟cp需要登錄到兩個(gè)主機(jī)實(shí)現(xiàn)文件的網(wǎng)絡(luò)傳輸,所以這里是登錄第二臺(tái)主機(jī)需要輸入的密碼。
第八行:interact eof 表示expect腳本執(zhí)行結(jié)束。執(zhí)行完成上述命令后,此時(shí)Expect會(huì)把控制權(quán)交給控制臺(tái),這個(gè)時(shí)候就變回手工操作。如果是使用ssh登錄其它主機(jī)的話,需要保持在交互狀態(tài),那么此時(shí)需要interact,如果沒有這一句登錄完成后會(huì)立刻退出,而不是留在遠(yuǎn)程終端上。如果你只是登錄過去執(zhí)行一段命令就退出,可將其改為expect eof。
如果出現(xiàn) ": no such file or directory 這樣的錯(cuò)誤,很可能是因?yàn)樵诒镜豔indows環(huán)境編輯,上傳到Linux下執(zhí)行因文件格式不同導(dǎo)致的,可使用vi或者vim在末行模式使用:set ff來查看文件格式,如果是dos格式的話,那么需要使用:set ff=unix 來改變文件格式。
參考文獻(xiàn)
[1] scp(1) manual
[2] Linux命令大全.scp命令
[3] Linux scp命令
[4] expect簡(jiǎn)單教程
總結(jié)
以上是生活随笔為你收集整理的Linux 命令(30)—— scp 命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php static 访问,使用PHP访
- 下一篇: iOS16.2beta4更新内容及升级建