Linux伺服器運維小技巧scp命令詳細教程。
前言
今天給大家帶來的是linux中比較實用的命令scp。善用小技巧,解決工作中的痛點。
掌握一門好的技術或者說一門好的藝術,最快捷的方式就是融入到工作中。
在工作的不斷鞭策之下,我其實也想偷偷懶,有時候覺得怎樣簡單快捷怎樣來。在某種特定的工作環境下,有些操作被限制死了,只能用傳統的方式傳輸(比如定製的商業加密U盤、光碟燒錄)。當你瞭解實際情況後,可能有更優解,你會尋求其它的突破口或者折中方案。
誇張的說法,我用了1分鐘熟悉了scp的用法,並直接運用於工作當中。然而,我教同事使用,他卻花了遠遠不止10倍的時間。其中的小竅門,你知道是為啥嗎?我的回答是:善用系統提供的幫助工具或者提示。
正文
一、SCP命令簡介
在Redhat系列可以使用幫助命令:man scp
,快速上手,掌握使用方法。
如下圖使用scp
或者man scp
命令:
1、簡介
-
NAME:scp — 安全複製(遠端檔案複製程式)
-
scp 在網路中的主機間進行檔案複製。 它用 ssh(1) 來傳輸及驗證資料,提供與 ssh(1)相同的安全保護。 它不象 rcp(1), scp 會根據需要詢問口令。 在任何檔名中都可以包含主機名和使用者名稱,用來指定從/向該主機複製此檔案。
-
Linux scp 命令主要用於 Linux 之間複製檔案和目錄。
-
scp 是 secure copy 的縮寫, scp 是 linux 系統下基於 ssh 登陸進行安全的遠端檔案拷貝命令。
-
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加強版。
2、前世今生
-
作者
Timo Rinne tri@iki.fi 和 Tatu Ylonen ylo@cs.hut.fi
-
起源
scp 基於University of California BSD 的 rcp(1) 原始碼
-
參考
rcp(1),sftp(1), ssh(1), ssh-add(1),ssh-agent(1),ssh-keygen(1),ssh_config(5),sshd(8)
二、測試環境搭建
1、排除干擾因素
- 防火牆規則
- 所在使用者的scp訪問許可權
- 預設埠是否變更
2、建議
可以租多臺雲伺服器測試,按時計費那種(騰訊雲或者阿里雲)。
個人建議:採用VMware虛擬機器搭建兩臺linux服務環境進行測試學習。或者安裝git,使用git bash測試scp傳輸檔案。有人會問,你為啥不直接用WinSCP或者FileZilla傳輸。生活在於折騰,消磨時間唄。從Windows到linux也是一樣的,當然這是本機搭建的VMware虛擬環境網路是打通的。不要問我為什麼,問就是省money唄。
3、準備環境
- VMware虛擬機器工具
- Redhat系列、Ubuntu或者國產銀河麒麟
- 系統環境:X86平臺
- ssh遠端工具xshell、SecureCRT、putty以及Git Bash等等,只要支援ssh遠端連線的工具。
這裡可以看看利用Git Bash工具,從Windows本地傳檔案到搭建的linux伺服器上。
三、SCP命令詳細操作說明
1、語法
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 ... [[user@]host2:]file2
簡單來看:
scp [可選引數] 本地檔案 目標目錄
scp /root/av/local_file.av remote_username@ip:/root/av
scp [可選引數] 本地目錄 目標目錄
scp -r /root/av/ remote_username@ip:/root/
2、引數解析
預設scp傳輸情況下,會顯示傳輸的速率以及進度。
只介紹部分,具體可以參考官方文件。常用的、重要的也就那麼幾個。
引數 | 作用 |
---|---|
-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為單位 |
-P port | 注意此處是大寫P, port是指定資料傳輸用到的埠號 |
-S program | 指定加密傳輸時所使用的程式。此程式必須能夠理解ssh(1)的選項 |
3、應用場景
一點小建議:如果不是很理解操作的意義。你可以這樣看待:本機到伺服器或者是伺服器到到伺服器,將其都看作是倉庫,我需要將一壺油或一箱香飄飄者是轉移到另一個倉庫(目的地)。單件的時候,直接傳一個過去;量大的時候,將其所在目錄打包傳輸過去。操作方便快捷,只需要簡單的幾行命令搞定檔案傳輸。
命令格式介紹
#複製檔案格式
scp local_file remote_username@remote_ip:remote_directory
#或者
scp local_file remote_username@remote_ip:remote_file
#或者
scp local_file remote_ip:remote_directory
#或者
scp local_file remote_ip:remote_file
複製目錄命令格式
#複製命令格式
scp -r local_directory remote_username@remote_ip:remote_directory
#或者
scp -r local_directory remote_ip:remote_directory
3.1、本地到遠端
1、準備了兩臺Centos7伺服器,已經設定好了靜態IP
採用虛擬機器搭建環境
- ip:192.168.245.147
- ip:192.168.245.131
2、在147伺服器上準備測試內容
下面舉例子的內容,啊啊啊就不要多幻想哈。只是想騷一騷而已,哈哈哈!!!
程式設計師都懂的,形象生動的sex教育片。
#新增一個av目錄
mkdir /root/av
#新增cangls檔案並新增內容
echo "cangls av" > /root/av/cangls.av
3、指定使用者名稱
個人推薦使用指定使用者名稱,方便快捷。
a、傳輸檔案
注意:第一次使用scp命令時會提示驗證,輸入yes即可通過。
#切記傳輸檔案時,目標目錄後面不要加/,否則會提示拒絕,這個習慣至今沒改過來
scp /root/av/cangls.av root@192.168.245.131:/root
傳檔案時,root目錄後面的 / 需要去掉,傳輸完成如下
b、驗證
傳輸檔案並指定檔名
#傳輸檔案,指定檔名,注意看目標檔名改了方便區別
scp /root/av/cangls.av root@192.168.245.131:/root/test.av
指定檔名並驗證
傳輸目錄:加上引數-r
#傳輸目錄,需要加上-r引數
scp -r /root/av/ root@192.168.245.131:/root/
傳輸目錄,到目標伺服器驗證
4、不指定使用者名稱
輸入的時候需要手動輸入使用者名稱和密碼。
傳輸檔案並沿用原始檔名
#傳輸檔案,沿用原始檔名
scp /root/av/cangls.av 192.168.245.131:/root
傳輸檔案,指定檔名
#傳輸檔案,指定檔名,注意看目標檔名改了方便區別
scp /root/av/cangls.av 192.168.245.131:/root/test.av
傳輸目錄,需要加上-r引數
#傳輸目錄,需要加上-r引數
scp -r /root/av/ 192.168.245.131:/root/
3.2、遠端到本地
從遠端複製到本地,說白了就是需要知道遠端的伺服器IP以及使用者名稱密碼,反過來操作即可從遠端取貨物。換個角度思考就是原本從A端傳到B端,此時從B端傳到A端。前提是兩端互通,不然會只進不出。
1、從遠端取cangls.av檔案到本地的root目錄下
scp root@192.168.245.147:/root/av/cangls.av /root
2、從遠端取av目錄到本地的root目錄下
scp -r root@192.168.245.147:/root/av/ /root/
4、注意事項
如果遠端伺服器防火牆有為scp命令設定了指定的埠,我們需要使用 -P 引數來設定命令的埠號,命令格式如下:
scp 命令使用指定埠號 6022
#從遠端伺服器獲取檔案到本地,指定埠
scp -P 6022 remote@ip:/usr/local/av.sh /root
使用scp需要具備讀取檔案的許可權,如果沒有許可權則無法傳輸。