Centos下關於ssh、scp與rsync設置與應用

最近應公司要求,需要對文件數據進行遠程傳輸與備份操作,特此寫了一篇文章記錄下了關於ssh、scp以及rsync的應用配置全過程,可能過程太過羅嗦,但主要就是想在不遺漏每個過程的情況下對此進行闡述,希望大家能夠體諒。當然類似的文章還有很多,本文僅以個人的名義來寫的,不喜勿噴!如果文章中有什麼錯誤的地方還請各位大神多多指點!萬分感謝!
一、ssh在文件共享裏面的應用
這個ssh可不僅僅是一個遠程登錄的一個服務,其實呢!它包括了幾個組件:ssh(遠程登錄)、sftp(文件共享【類似FTP】)、scp(文件共享【類似cp拷貝】)。所以大家在聽到ssh的時候可千萬不要認爲這個軟件包在用的時候只能實現遠程登錄,別的什麼事情都幹不了,實際上不是這樣的。希望大家明白!
首先我們先來看一下SSH遠程登錄的事情,我們正常使用的客戶端的遠程登錄管理工具(如:SecureCRT、Xshell等..)來做登錄管理的控制,但是,
如果我們想從一臺Linux服務器登錄到另一臺Linux服務器的話,我們應該怎麼處理?
我們可以使用ssh命令【ssh遠程登錄:ssh 用戶名@遠程主機IP地址】進行登錄,但是我們登錄的時候要注意以下規則:
a.不能使用空密碼登錄
b.不能使用root用戶身份登錄(具體根據centos版本來,目前centos版本中多數都是默認是允許root用戶登錄,這裏只是作爲例外考慮,爲了安全問題,一般我們建議搭建不要使用root用戶登錄,因此建議搭建使用root用戶去授權普通用戶去進行日常操作)
下面來看一下ssh命令具體的使用方式:
ssh遠程登錄:ssh 用戶名@遠程主機IP地址
常用選項:
-2 強制使用第二代ssh協議(ssh發展的兩個版本,這裏建議大家使用ssh2,因爲它的安全性會更高點,我這裏爲了便於演示,有些可能就直接默認登錄,在此聲明一下,我們現在使用的ssh版本都是這個openssh它,它同時支持了ssh1和ssh2)
-p 端口號
例如:
ssh -2 [email protected]
案例:
我這邊準備兩臺Centos服務器,信息如下:
機器一:192.168.1.17 已存在普通用戶:formal
機器二:192.168.1.18 已存在普通用戶:formal
例如我這裏從17服務器遠程登錄到18服務器:
--登錄17服務器,切換爲普通用戶,如圖1:
su - formal


--使用ssh命令從17服務器遠程登錄到18服務器,提示你是否繼續連接登錄,直接輸入yes即可,如圖2:
ssh [email protected]


由於我們沒有對formal用戶設置密碼,因此我們直接回車.就會發現,請求被拒絕。這是因爲登錄的時候centos系統默認是不能使用空密碼登錄。因此,我們在這裏將兩臺服務器的普通用戶同時設置一個密碼,以備後面使用,如圖3:


//設置密碼(這裏要特殊說明一下,使用普通用戶直接設置密碼的時候,可以直接使用passwd命令進行設置,但是要求密碼不能過於簡短與簡單,要包含特殊字符,否則不讓你設置成功。如果使用root用戶設置密碼,可以使用passwd 用戶名,進行設置,使用root用戶設置密碼時候可以使用簡單的密碼。爲了便於測試,我這裏直接使用root用戶設置密碼.),這裏密碼爲:formal
passwd formal
//刪除密碼(root用戶刪除方式:passwd -d formal;普通用戶刪除方式:passwd -d此處要說明一下,用root用戶爲普通用戶創建的密碼只能用root用戶刪除)

--好了,既然用戶密碼我們已經設置好了,那就繼續登錄試試,輸入密碼,登錄成功。如圖4:
ssh [email protected]


--接下來爲大家介紹一下ssh的常用配置。這裏主要爲大家介紹一下怎麼禁止root用戶登錄,還有就是怎麼樣改變ssh的端口號。
--使用root用戶,編輯18服務器的/etc/ssh/sshd_config文件,我們可以看到PermitRootLogin yes這句話是註釋掉的,默認情況下都是可以使用root用戶登錄的因此這句話註釋掉與不註釋掉都是可以使用root用戶登錄的.如圖5,5-1:
ssh [email protected]


如果我們要想阻止root用戶登錄,只要將PermitRootLogin yes這句話中的yes改爲no表示不允許使用root用戶登錄即可,改完後後我們重啓ssh服務,然後再17服務器上使用root用戶登錄測試,即可發現18服務器禁止了我們使用root用戶遠程登錄服務器,如圖6,6-1:
vi /etc/ssh/sshd_config
service sshd restart


ssh [email protected]

 

--接下來我們看一下怎麼改變ssh登錄的端口號。
正常情況,我們使用ssh命令遠程登錄另一臺服務器的時候都會使用默認的22端口登錄,如果我們想改變登錄的端口號,我們可以更改/etc/ssh/sshd_config文件中Port 22屬性,將22改爲你要修改登錄的端口號,例如我這裏將18服務器登錄端口改爲10022,重啓ssh服務登錄,在17服務器登錄18服務器,這時候登錄指令需要我們加上-p來指定登錄端口號。測試結果,如圖7-1,7-2,7-3:
ssh -p10022 [email protected]


關於ssh遠程登錄,就說這些,對於sftp一般用的少,這裏就不再多說,有興趣的童鞋自己可以找度娘查查相關資料。
緊接着,我們來介紹一下scp的應用。說起scp的應用,其實很簡單,正常我們在應用的過程中,我們可以非常方便的將本機文件拷貝到遠程主機,當然也可以將遠程主機上的文件拷貝到本機。關於scp的使用如下:
本機文件拷貝到遠程主機
scp 本地文件 用戶名@遠程主機IP地址:遠程主機目標目錄
scp -r 本地目錄 用戶名@遠程主機IP地址:遠程主機目標目錄
遠程主機文件拷貝到本機
scp 用戶名@遠程主機IP地址:遠程主機文件 本地目錄 
scp -r 用戶名@遠程主機IP地址:遠程主機目錄 本地目錄
常用選項:
-p(小寫) 保持原有文件屬性(把一個文件備份到另一個地方的時候相當於相當於創建一個目錄,例如時間就會改變,如果我們想讓相關屬性不便加這個屬性即可)
-r 複製目錄
-P(大寫) 指定端口
注意:大小寫是爲了區分屬性與端口衝突
提醒:我們再使用scp命令的時候,必須有個有效的用戶身份,而且這個用戶必須是遠程主機目標目錄有寫權限的,例如:你不能使用xushouwei用戶拷貝文件到/root目錄下。所以一般來講,都是寫到對用戶有寫權限的目錄。這裏需要注意一下。
舉個例子:
scp /home/formal/xushouwei.properties [email protected]:/root/ 使用該命令拷貝,將會提示Permission denied(權限拒絕),如圖8:


--從17服務器拷貝文件到18服務器(上傳),如圖9:
scp /home/formal/xushouwei.properties [email protected]:/home/formal


拷貝前後18服務器變化,如圖9-1:


--從17服務器拷貝目錄到18服務器(上傳),如圖10:
scp -r /home/formal/com/ [email protected]:/home/formal


拷貝前後18服務器變化,如圖10-1:


--從18服務器拷貝文件到17服務器(下載),如圖11:
scp [email protected]:/home/formal/xushouwei.properties /home/formal/


--從18服務器拷貝目錄到17服務器(下載),如圖12:
scp -r [email protected]:/home/formal/com/ /home/formal/


//所以這個scp拷貝,使用起來非常的簡單,是我們比較推薦使用的一種方式,而且它正果文件傳輸的過程中數據式加密傳輸的,要比其他傳輸方式安全性要更高一些。在使用上也比較方便..因此我們可以方便的週期性的從遠程主機到本地以及從本地到遠程主機實現備份與拷貝,但這裏有一個問題,就是執行命令的時候要執行密碼,那執行密碼的話就沒辦法實現自動化的備份與拷貝任務,我們之後就會爲大家介紹通過信任主機的建立來實現自動化的備份.
--對稱祕鑰加密(例如:我們家裏使用的"鎖")如圖13:
特點:加密與解密使用統一祕鑰
優勢:速度快
缺點:祕鑰本身需要交換


--非對稱祕鑰加密(公開密鑰加密)如圖14:
特點:使用時候生成兩個祕鑰,一個公開存放,爲公鑰;一個私人持有,爲私鑰;用戶用其中一個祕鑰加密的數據只有用另一個祕鑰才能解密.
用公鑰加密,私鑰解密->加密文件
用私鑰加密,公鑰解密->數字簽名
優勢:安全性好
缺點:速度慢


//我們的信任主機就是採用非對稱祕鑰加密的原理來實現的,當前我們從一臺主機登錄到另外一臺主機重要輸入密碼,這太麻煩了,能不能想一個辦法來告訴對方主機,只要是我這個用戶登錄你就建立一個信任關係,不需要密碼,那麼這要有一個方法,一臺主機吧公鑰生成,發給另外一臺主機,另外一臺主機把公鑰判斷爲可認證的公鑰,這個時候使用ssh登錄的時候就不需要密碼了,看一下原理15圖:


--既然原理都已經說了,我們就在實戰操作一下。。。
我這裏定義:主機一的ip爲192.168.1.17,用戶爲非root用戶formal,主機二的ip爲192.168.1.18,用戶爲非root用戶formal。
--在17服務器上使用formal用戶生成祕鑰對:
ssh-keygen -t rsa
這時候就會提示你建議一個公鑰和一個私鑰然後還會告訴你這個祕鑰保存的位置,默認位置是放在:/home/formal/.ssh/目錄下.緊接着回車就會提示你認證,輸入密碼認證,這個設置我這裏直接回車,接着又會提示你輸入密碼認證,繼續回車即可。整個過程如圖16,其中Your public key has been saved in /home/formal/.ssh/id_rsa.pub.這句話就是告訴你你剛纔使用命令生成的公鑰位置:


--緊接車我們把剛纔生成的公鑰拷貝到主機二上的/home/formal目錄下。輸入如下命令並輸入密碼即可,如圖17:
scp /home/formal/.ssh/id_rsa.pub [email protected]:/home/formal/


//你看現在我們執行拷貝或者登錄還是需要密碼的,我們的目的就是讓他不需要密碼,接下來我們就需要對主機二進行操作了.
--登錄主機二並切換到formal用戶,如圖18:我們可以看到在/home/formal目錄下有個id_rsa


//我們可以看到在/home/formal目錄下有個id_rsa.pub文件,對了,這個就是我們剛纔使用主機一生成並拷貝過來的祕鑰。我們所要進行的操作就是把這個公鑰文件處理一下生成一個信任祕鑰文件。因此我們需要在主機二上進行如下幾步操作:
這裏需要提醒一下,每個用戶的ssh信息都保存在自己宿主目錄的.ssh目錄裏面,但這個目錄並不是每個系統都會自動創建(沒有的話需要手工進行創建,使用命令:mkdir .ssh),但是在centos6.7系統下這個目錄默認是隱藏的,我們可以使用ls -la查看宿主目錄內容,如圖19所示:
ls -la


--把當前目錄下的id_rsa.pub文件輸出重新生成到.ssh目錄下,創建一個新的認證文件,這個認證文件名稱爲:authorized_key(固定),生成並查看,如圖20:
cat id_rsa.pub >> .ssh/authorized_keys
ls -l .ssh/


//然後再當前用戶的宿主目錄的.ssh目錄下我們就生成了這個認證文件建立了一個信任關係。其實這個原理非常的簡單,就上我們剛纔講的非對稱祕鑰的數字簽名一樣,換句話說你想讓別人知道這是你登錄的,對你建立信任關係,怎麼建立信任關係?首先你得把你的公鑰給人家,人家用公鑰去驗證是不是你登錄的,是你登錄的話就讓你登錄,對你建立信任建立數字簽名。正常在很多linux版本中走到這個步驟就結束了。但是在新的linux中對權限要求非常嚴格,它要求在你的用戶宿主目錄下的.ssh目錄下的文件必須是700,也就是說只有這個普通用戶纔有權限,其他用戶沒有權限而且要求這個權限控制文件的權限必須是600,也就是說我們在使用的過程中只有這個formal用戶有讀寫權限。這裏要提醒一下,這個權限一定要改,因爲在新版linux中對權限要求非常嚴格。因此我們需要執行如下命令進行操作,如圖21所示:
chmod 600 .ssh/authorized_keys
chmod 700 .ssh


--至此,我們整個信任主機的建立過程就改完了。現在我們測試一下對不對。
--從主機一遠程登錄到遠程主機二(這個過程不在提示你輸入密碼),如圖:22:
ssh [email protected]


--從主機一拷貝文件到遠程主機二(這個過程不在提示你輸入密碼),如圖:23:
scp xushouwei.properties [email protected]:/home/formal/


注意:整個過程需要特別注意信任關係的認證原理用戶對應關係(一個用戶建立一個信任主機關係),這裏需要大家特別注意一下【完全備份】。
至此,有沒有人會問有沒有增量備份?因爲很多時候,我們在做完全備份的時候備份的時間可能會比較長,備份的時候佔用的系統時間和資源都會比較不理想,那麼這個時候我們選擇增量備份是比較快的,直接把一個改動的文件做一個更新。這裏面我推薦大家使用另外一個工具【rsync】,如果你想遠程同步的話就要使用該工具,下面我對該工具的特點簡要的爲大家介紹一下:
a.方便增量備份實現
b.可鏡像保存整個目錄樹和文件系統
c.保持文件的權限、時間、軟硬鏈接等
d.文件傳輸效率高
e.可以使用ssh加密通道
可能,很多人都會覺得看一些關於rsync資料的時候就是特別的複雜,其實我們使用最常用的方法就行了,不用把它想象的多麼複雜,我這裏就把它最常用的應用給大家走一遍。rsync這個服務默認在linux系統裏面都是使用xinetd(關於xinetd的知識請大家自行問度娘)來進行託管的,而且在所有的linux裏面默認都是安裝的,所以我們首先就要啓動這個服務。
--查看rsync文件位置,如圖24:
ls /etc/xinetd.d/


--使用之前首先判斷rsync這個軟件有麼有安裝,正常情況下所有的linux默認都是安裝的,如果沒有安裝的話自行下載並安裝(
下載:wget http://pkgs.repoforge.org/rsync/rsync-3.1.1-1.el6.rfx.x86_64.rpm 安裝:rpm -ivh rsync-3.1.1-1.el6.rfx.x86_64.rpm或者使用yum安裝:yum install -y rsync xinetd)一下即可,如圖25:
rpm -q rsync


--使用root用戶修改/etc/xinetd.d/rsync配置文件,將disable屬性設置爲no,重啓service xinetd restart啓動rsync服務.如圖26-1,26-2:
vi /etc/xinetd.d/rsync


service xinetd restart


//至此,關於rsync的配置到這個步驟就可以了。那麼接下來怎麼樣來使用rsync?
案例情景:每天凌晨兩點做一下備份將18(主機二)上的宿主目錄(/home/formal/)目錄下的com目錄備份到17(主機一)上的宿主目錄(/home/formal/)目錄下。如圖27:
使用非root用戶formal用戶進行操作:
crontab -e
0 2 * * * /usr/bin/rsync -arHz --progress --delete [email protected]:/home/formal/com /home/formal


--當然我們爲了操作方便可以直接進行手動備份,手動備份之前我們先看一下主機一宿主目錄下的所有目錄文件.如圖28:
ll


--使用如下命令進行手動備份文件操作,如圖29:


--再次查看主機一宿主目錄下的所有目錄文件,這時候主機一宿主目錄下多了個com目錄.如圖30:
ll


//好了,到現在爲止,我們已經學會了使用rsync工具進行文件的增量備份。下面我們對備份進行分析一下。如圖31:


至此,rsync的應用就講到這裏...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章