Linux小技巧scp命令

龍騰萬里sky發表於2022-02-12

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需要具備讀取檔案的許可權,如果沒有許可權則無法傳輸

by 龍騰萬里sky 原創不易,白嫖有癮

相關文章