第三章 遠(yuǎn)程連接服務(wù)器
1.1 遠(yuǎn)程連接服務(wù)器簡介
1、什么是遠(yuǎn)程連接服務(wù)器?
遠(yuǎn)程連接服務(wù)器通過文字或圖形接口方式來遠(yuǎn)程登錄系統(tǒng),讓你在遠(yuǎn)程終端前登錄linux主機以取得可操作主機接口(shell),而登錄后的操作感覺就像是坐在系統(tǒng)前面一樣。
2、遠(yuǎn)程連接服務(wù)器的功能
分享主機的運算能力
服務(wù)器類型:有限度開放連接
工作站類型:只對內(nèi)網(wǎng)開放
3、遠(yuǎn)程連接服務(wù)器的類型(以登錄的連接界面來分類)
文字接口
明文傳輸:Telnet、RSH等,目前非常少用
加密傳輸:SSH為主,已經(jīng)取代明文傳輸
圖形接口:XDMCP、VNC、XRDP等
4、文字接口連接服務(wù)器
SSH(Secure Shell Protocol,安全的殼程序協(xié)議)它可以通過數(shù)據(jù)包加密技術(shù)將等待傳輸?shù)臄?shù)據(jù)包加密后再傳輸?shù)骄W(wǎng)絡(luò)上。ssh協(xié)議本身提供兩個服務(wù)器功能:一個是類似telnet的遠(yuǎn)程連接使用shell的服務(wù)器;另一個就是類似ftp服務(wù)的sftp-server,提供更安全的ftp服務(wù)。
1.2 連接加密技術(shù)簡介
目前常見的網(wǎng)絡(luò)數(shù)據(jù)包加密技術(shù)通常是通過“非對稱密鑰系統(tǒng)”來處理的。主要通過兩把不一樣的公鑰與私鑰來進行加密與解密的過程。
公鑰(public key):提供給遠(yuǎn)程主機進行數(shù)據(jù)加密的行為,所有人都可獲得你的公鑰來將數(shù)據(jù)加密。
私鑰(private key):遠(yuǎn)程主機使用你的公鑰加密的數(shù)據(jù),在本地端就能夠使用私鑰來進行解密。私鑰只有自己擁有。
SSH工作過程:在整個通訊過程中,為實現(xiàn)SSH的安全連接,服務(wù)端與客戶端要經(jīng)歷如下五個階段:
一、版本協(xié)商階段
1、服務(wù)器端打開端口22
,等待客戶端連接;
2、客戶端向服務(wù)器端發(fā)起TCP初始連接請求,TCP連接建立后,服務(wù)器向客戶端發(fā)送第一個報文,包括版本標(biāo)志字符串,格式為“SSH-<主協(xié)議版本號>.<次協(xié)議版本號>.<軟件版本號>”,協(xié)議版本號由主版本號和次版本號組成,軟件版本號主要是為調(diào)試使用。
3、客戶端收到報文后,解析該數(shù)據(jù)包,如果服務(wù)器的協(xié)議版本號比自己的低,且客戶端能支持服務(wù)器端的低版本,就使用服務(wù)器端的低版本協(xié)議號,否則使用自己的協(xié)議版本號。
4、客戶端回應(yīng)服務(wù)器一個報文,包含了客戶端決定使用的協(xié)議版本號。服務(wù)器比較客戶端發(fā)來的版本號,決定是否能同客戶端一起工作。如果協(xié)商成功,則進入密鑰和算法協(xié)商階段,否則服務(wù)器斷開TCP連接。
說明
:上述報文都是采用明文方式傳輸。
二、密鑰和算法協(xié)商階段
1、服務(wù)器端和客戶端分別發(fā)送算法協(xié)商報文給對端,報文中包含自己支持的公鑰算法列表、加密算法列表、MAC(Message Authentication Code,消息驗證碼)算法列表、壓縮算法列表等等。
2、服務(wù)器端和客戶端根據(jù)對端和本端支持的算法列表得出最終使用的算法。
3、服務(wù)器端和客戶端利用DH交換(Diffie-Hellman Exchange)算法、主機密鑰對等參數(shù),生成會話密鑰和會話ID。
由此,服務(wù)器端和客戶端就取得了相同的會話密鑰和會話ID。對于后續(xù)傳輸?shù)臄?shù)據(jù),兩端都會使用會話密鑰進行加密和解密,保證了數(shù)據(jù)傳送的安全。在認(rèn)證階段,兩端會使用會話用于認(rèn)證過程。
會話密鑰的生成:
1.客戶端需要使用適當(dāng)?shù)目蛻舳顺绦騺碚埱筮B接服務(wù)器,服務(wù)器將服務(wù)器的公鑰發(fā)送給客戶端。(服務(wù)器的公鑰產(chǎn)生過程:服務(wù)器每次啟動sshd服務(wù)時,該服務(wù)會主動去找/etc/ssh/ssh_host*
文件,若系統(tǒng)剛裝完,由于沒有這些公鑰文件,因此sshd會主動去計算出這些需要的公鑰文件,同時也會計算出服務(wù)器自己所需要的私鑰文件。)
2.服務(wù)器生成會話ID,并將會話ID發(fā)給客戶端。
3.若客戶端第一次連接到此服務(wù)器,則會將服務(wù)器的公鑰數(shù)據(jù)記錄到客戶端的用戶主目錄內(nèi)的~/.ssh/known_hosts。
若是已經(jīng)記錄過該服務(wù)器的公鑰數(shù)據(jù),則客戶端會去比對此次接收到的與之前的記錄是否有差異。客戶端生成會話密鑰,并用服務(wù)器的公鑰加密后,發(fā)送給服務(wù)器。
4.服務(wù)器用自己的私鑰將收到的數(shù)據(jù)解密,獲得會話密鑰。
5.服務(wù)器和客戶端都知道了會話密鑰,以后的傳輸都將被會話密鑰加密。
三、認(rèn)證階段
SSH提供兩種認(rèn)證方法:
1、基于口令的認(rèn)證(password認(rèn)證):客戶端向服務(wù)器發(fā)出password認(rèn)證請求,將用戶名和密碼加密后發(fā)送給服務(wù)器,服務(wù)器將該信息解密后得到用戶名和密碼的明文,與設(shè)備上保存的用戶名和密碼進行比較,并返回認(rèn)證成功或失敗消息。
2、基于密鑰的認(rèn)證(publickey認(rèn)證):客戶端產(chǎn)生一對公共密鑰,將公鑰保存到將要登錄的服務(wù)器上的那個賬號的家目錄的.ssh/authorizedkeys文件中。認(rèn)證階段:客戶端首先將公鑰傳給服務(wù)器端。服務(wù)器端收到公鑰后會與本地該賬號家目錄下的authorizedkeys中的公鑰進行對比,如果不相同,則認(rèn)證失??;否則服務(wù)端生成一段隨機字符串,并先后用客戶端公鑰和會話密鑰對其加密,發(fā)送給客戶端??蛻舳耸盏胶髮⒔饷芎蟮碾S機字符串用會話密鑰發(fā)送給服務(wù)器。如果發(fā)回的字符串與服務(wù)器端之前生成的一樣,則認(rèn)證通過,否則,認(rèn)證失敗。
注
:服務(wù)器端對客戶端進行認(rèn)證,如果認(rèn)證失敗,則向客戶端發(fā)送認(rèn)證失敗消息,其中包含可以再次認(rèn)證的方法列表??蛻舳藦恼J(rèn)證方法列表中選取一種認(rèn)證方法再次進行認(rèn)證,該過程反復(fù)進行。直到認(rèn)證成功或者認(rèn)證次數(shù)達(dá)到上限,服務(wù)器關(guān)閉連接為止
1.3 ssh遠(yuǎn)程連接服務(wù)簡介
1、安裝ssh服務(wù):安裝包包名為 openssh-server
2、修改配置文件
ssh配置文件:/etc/ssh/sshd_config
ssh默認(rèn)配置文件
17.#Port 22 #監(jiān)聽端口,默認(rèn)監(jiān)聽22端口 【默認(rèn)可修改】
18.#AddressFamily any #IPV4和IPV6協(xié)議家族用哪個,any表示二者均有
19.#ListenAddress 0.0.0.0 #指明監(jiān)控的地址,0.0.0.0表示本機的所有地址 【默認(rèn)可修改】
20.#ListenAddress :: #指明監(jiān)聽的IPV6的所有地址格式
22.# The default requires explicit activation of protocol 1
23.#Protocol 2 #使用SSH第二版本
25.# HostKey for protocol version 1 #一版的SSH支持以下一種秘鑰形式
26.#HostKey /etc/ssh/ssh_host_key
27.# HostKeys for protocol version 2 #使用第二版本發(fā)送秘鑰,支持以下四種秘鑰認(rèn)證的存放位置
28.HostKey /etc/ssh/ssh_host_rsa_key # rsa私鑰認(rèn)證 【默認(rèn)】
29.#HostKey /etc/ssh/ssh_host_dsa_key # dsa私鑰認(rèn)證
30.HostKey /etc/ssh/ssh_host_ecdsa_key # ecdsa私鑰認(rèn)證
31.HostKey /etc/ssh/ssh_host_ed25519_key # ed25519私鑰認(rèn)證
35.#ServerKeyBits 1024 #主機秘鑰長度
40.# Logging
41.# obsoletes QuietMode and FascistLogging
42.#SyslogFacility AUTH
43.SyslogFacility AUTHPRIV #當(dāng)有人使用ssh登錄系統(tǒng)的時候,SSH會記錄信息,信息保存在/var/log/secure里面
44.#LogLevel INFO #日志的等級
45.# Authentication:
48.#LoginGraceTime 2m #登錄的寬限時間,默認(rèn)2分鐘沒有輸入密碼,則自動斷開連接
49.#PermitRootLogin yes #是否允許管理員遠(yuǎn)程登錄,'yes'表示允許
50.#StrictModes yes #是否讓sshd去檢查用戶主目錄或相關(guān)文件的權(quán)限數(shù)據(jù)
51.#MaxAuthTries 6 #最大認(rèn)證嘗試次數(shù),最多可以嘗試6次輸入密碼。之后需要等待某段時間后才能再次輸入密碼
52.#MaxSessions 10 #允許的最大會話數(shù)
59.AuthorizedKeysFile .ssh/authorized_keys #選擇基于密鑰驗證時,客戶端生成一對公私鑰之后,會將公鑰放到.ssh/authorizd_keys里面
79.PasswordAuthentication yes #是否允許支持基于口令的認(rèn)證
83.ChallengeResponseAuthentication no #是否允許使用鍵盤輸入身份驗證,也就是xshell的第三個登錄方式
129.#UseDNS yes #是否反解DNS,如果想讓客戶端連接服務(wù)器端快一些,這個可以改為no
146.Subsystem sftp /usr/libexec/openssh/sftp-server #支持 SFTP ,如果注釋掉,則不支持sftp連接
154.AllowUsers user1 user2 #登錄白名單(默認(rèn)沒有這個配置,需要自己手動添加),允許遠(yuǎn)程登錄的用戶。如果名單中沒有的用戶,則提示拒絕登錄
1.4 sftp用法介紹
sftp的用法(服務(wù)端IP為172.24.8.128):
sftp下可用的指令:ls、mkdir、rmdir、pwd、chgrp、chown、chmod、ln、rm、exit、bye、quit
對于客戶端可用的指令:lcd(切換目錄)、lls、lpwd
將文件由本機上傳到遠(yuǎn)程主機:put [本機文件] ,文件會存儲到當(dāng)前遠(yuǎn)程主機的目錄下。
將文件由遠(yuǎn)程主機下載下來:get [遠(yuǎn)程主機文件],文件會存儲在當(dāng)前本機所在的目錄當(dāng)中。
使用windows的xshell連接sftp:
[C:\~]$ sftp root@172.24.8.128
sftp:/root> put E:\test.txt 將windows下的文件上傳至linux的當(dāng)前目錄下(無法上傳目錄也無法指定目錄路徑)
sftp:/root> get ceshi 將linux當(dāng)前目錄的文件下載至windows當(dāng)前的目錄,lcd可查看當(dāng)前客戶端目錄(無法上傳目錄也無法指定目錄路徑)
使用linux客戶端連接sftp:
[root@client ~]# sftp root@172.24.8.128
將客戶端的client目錄上傳至服務(wù)端的test目錄
sftp> pwd
Remote working directory: /test
sftp> lpwd
Local working directory: /client
sftp> mkdir /test/client
sftp> put -r /client/ /test
Uploading /client/ to /test/client
Entering /client/
/client/upload 100% 5 0.0KB/s 00:00
sftp> ls /test
/test/client
sftp> ls /test/client/
/test/client/upload
將服務(wù)端目錄linuxtest下載到客戶端client目錄
sftp> pwd
Remote working directory: /linuxtest
sftp> lpwd
Local working directory: /client
sftp> get -r /li
lib/ lib64/ linuxtest/
sftp> get -r /linuxtest/ /client
Fetching /linuxtest/ to /client/linuxtest
Retrieving /linuxtest
/linuxtest/download 100% 5 0.0KB/s 00:00
sftp> lls /client
linuxtest upload
1.5 實驗
實驗一:修改ssh服務(wù)端口號
#修改ssh服務(wù)的端口號
[root@web ~]# vi /etc/ssh/sshd_config
Port 2222
#保存退出后,添加防火墻允許策略
[root@web ~]# firewall-cmd --permanent --add-port=2222/tcp
success
[root@web ~]# firewall-cmd --reload
#添加自定義端口到服務(wù)
[root@web ~]# semanage port -a -t ssh_port_t -p tcp 2222
注意
:如果執(zhí)行該命令時出現(xiàn)以下提示,請換個端口再試:
ValueError: Port tcp/4444 already defined
實驗二:拒絕root用戶遠(yuǎn)程登陸
#請保持服務(wù)器上至少有一個可以遠(yuǎn)程登陸的普通遠(yuǎn)程賬號
#修改配置文件如下:
#打開該選項并修改參數(shù)為no
PermitRootLogin no
#重啟服務(wù)后生效,使用時使用普通用戶進行登陸,需要使用root用戶時再切換
實驗三:允許特定用戶ssh登陸,其他用戶都無法登陸
#編輯配置文件,在最后添加如下內(nèi)容:
AllowUsers USERNAME
#USERNAME為你允許登陸的賬號,如果是多個用戶,中間用空格隔開
#重啟ssh服務(wù)后生效
實驗四:虛擬機和虛擬機之間使用密鑰進行登錄
#創(chuàng)建密鑰對
[root@web ~]# ssh-keygen -t rsa
ssh-keygen - 生成、管理和轉(zhuǎn)換認(rèn)證密鑰 -t制定類型 RSA
/root/.ssh/id_rsa私鑰文件
/root/.ssh/id_rsa.pub公鑰文件
#復(fù)制該公鑰文件到服務(wù)端的該目錄下:
[root@web ~]# scp /root/.ssh/id_rsa.pub root@192.168.40.132:/root/.ssh/authorized_keys
#在本地服務(wù)器上登陸對端服務(wù)器
[root@web ~]# ssh 192.168.40.132
登錄時可以使用如下命令(172.24.8.128為ssh服務(wù)端):
[root@client ~]# ssh -i /root/.ssh/id_rsa root@172.24.8.128
實驗五:通過xshell使用密鑰驗證進行登陸
客戶端產(chǎn)生密鑰的兩種方式:
方式一:
[root@web ~]# ssh-keygen -t rsa -b 4096
[root@web .ssh]# cp id_rsa.pub authorized_keys
方式二:
使用xshell工具的用戶密鑰管理生成公鑰和私鑰,然后將公鑰上傳至服務(wù)端的即將要登錄的用戶的家目錄下并命名為[root@localhost .ssh]# mv id_rsa_2048.pub authorized_keys
服務(wù)端:
#取消使用密碼進行遠(yuǎn)程登陸
PasswordAuthentication no
#修改配置文件保存退出,重啟服務(wù)
作業(yè):
ssh實驗:
1.兩臺機器:第一臺機器作為客戶端,第二臺機器作為服務(wù)器,在第一臺使用rhce用戶免密登錄第二臺機器
2.禁止root用戶遠(yuǎn)程登錄和設(shè)置三個用戶sshuser1, sshuser2, sshuser3, 只允許sshuser3登錄,不允許sshuser1, sshuser2登錄
第一題:兩臺機器:第一臺機器作為客戶端,第二臺機器作為服務(wù)器,在第一臺使用rhce用戶免密登錄第二臺機器
第一臺機子:
Step1:[root@rhce ~]# ssh-keygen -t rsa -b 2048:使用rsa加密算法,且長度為2048個字節(jié)
Step2:[root@rhce ~]# cd ~/.ssh/:切換到.ssh目錄
[root@rhce .ssh]# ls -l:查看公鑰和私鑰是否成功生成
Step3:[root@rhce .ssh]# ssh-copy-id root@192.168.231.135:復(fù)制第二臺機子的登陸信息到/root/.ssh/id_rsa.pub文件中
Step4:[root@rhce .ssh]# ssh root@192.168.231.135:遠(yuǎn)程登陸第二臺機子,不需要輸密碼直接登陸則成功了
如果想第二臺機子也免密登陸第一臺機子的話,操作步驟和第一臺一樣的
第二題:禁止root用戶遠(yuǎn)程登錄和設(shè)置三個用戶sshuser1, sshuser2, sshuser3, 只允許sshuser3登錄,不允許sshuser1, sshuser2登錄
禁止root用戶遠(yuǎn)程登陸:
Step1:[root@rhce rhce]# vim /etc/ssh/sshd_config :進入ssh配置文件,將permitrootlogin從yes改為no
Step2:重啟sshd服務(wù):[root@rhce rhce]# systemctl restart sshd
Step3:新建會話,使用遠(yuǎn)程登陸root用戶,服務(wù)器拒絕請求則禁止root用戶遠(yuǎn)程登陸成功
設(shè)置三個用戶sshuser1, sshuser2, sshuser3, 只允許sshuser3登錄,不允許sshuser1, sshuser2登錄
Step1:創(chuàng)建新用戶,并設(shè)置密碼
[root@rhce rhce]# useradd sshuser1 //創(chuàng)建sshuser1用戶
[root@rhce rhce]# useradd sshuser2 //創(chuàng)建sshuser2用戶
[root@rhce rhce]# useradd sshuser3 //創(chuàng)建sshuser3用戶
[root@rhce rhce]# echo "123456" | passwd --stdin sshuser1 //給sshuser1用戶設(shè)置密碼,通過管道符傳遞給passwd
[root@rhce rhce]# echo "123456" | passwd --stdin sshuser2 //給sshuser2用戶設(shè)置密碼,通過管道符傳遞給passwd
[root@rhce rhce]]# echo "123456" | passwd --stdin sshuser3 //給sshuser3用戶設(shè)置密碼,通過管道符傳遞給passwd 。
Step2:[root@rhce rhce]]# vim /etc/ssh/sshd_config :進入sshd配置文件
按G直接到文檔末尾,在配置文檔最后一行插入AllowUsers USERNAME user1 , sshuser3
//因為只運行用戶3登陸,所以這里只添加用戶3
Step3:[root@rhce rhce]# systemctl restart sshd:重啟sshd服務(wù)
Step4:遠(yuǎn)程登陸sshuser1、sshuser2、sshuser3,用戶3運許訪問,其他兩個則deny
[rhce@rhce ~]$ ssh sshuser3@192.168.231.134
[sshuser3@rhce ~]$ ssh sshuser1@192.168.231.134
文章來源:http://www.zghlxwxcb.cn/news/detail-526506.html
[sshuser3@rhce ~]$ ssh sshuser2@192.168.231.134文章來源地址http://www.zghlxwxcb.cn/news/detail-526506.html
到了這里,關(guān)于ssh遠(yuǎn)程連接服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!