柚子快報邀請碼778899分享:運維 詳解ssh遠程登錄服務(wù)
柚子快報邀請碼778899分享:運維 詳解ssh遠程登錄服務(wù)
華子目錄
簡介概念功能
分類文字接口圖形接口
文字接口ssh連接服務(wù)器淺淺介紹一下加密技術(shù)凱撒加密加密分類對稱加密非對稱加密非對稱加密方法(也叫公鑰加密)
ssh兩大類認證方式:連接加密技術(shù)簡介密鑰解析
ssh工作過程版本協(xié)商階段密鑰和算法協(xié)商階段認證階段(兩種認證方法)
ssh服務(wù)配置安裝ssh配置文件分析
ssh實驗實驗1實驗2ubuntu
實驗3實驗4
簡介
概念
遠程連接服務(wù)器通過文字接口或圖形接口方式來遠程登錄系統(tǒng),讓你在遠程終端前登錄Linux主機以取得可操作主機接口(shell),而登錄后的操作感覺就像坐在系統(tǒng)前面一樣
功能
分享主機的運算能力服務(wù)器類型:有限度開放連接工作站類型:只對內(nèi)網(wǎng)開放
分類
文字接口
明文傳輸:Telnet,RSH等,目前非常少用
這里我們可以使用wireshark抓包工具驗證telnet明文傳輸
第一步:首先我們需要在Linux主機中安裝telnet服務(wù)
[root@server ~]# yum install telnet-server -y # 安裝telnet
[root@server ~]# systemctl start telnet.socket # 啟動服務(wù)
第二步:使用MobaXterm建立telnet連接 輸入Linux主機密碼,進入主機 第三步:啟動wireshark,選擇VMnet8網(wǎng)卡 如果沒有wireshark,則可以在https://www.wireshark.org/download.html下載安裝wireshark,傻瓜式安裝即可 在MobaXterm中輸入ip a
[root@server ~]# ip a
1: lo:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160:
link/ether 00:0c:29:9e:1d:25 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.80.129/24 brd 192.168.80.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe9e:1d25/64 scope link noprefixroute
valid_lft forever preferred_lft forever
在wireshark選擇記錄后單右鍵->追蹤流->TCP流 我們可以看到是明文傳輸
密文傳輸:ssh為主,已經(jīng)取代了明文傳輸 關(guān)閉上述的telnet連接,建立ssh連接,查看是否為密文傳輸 我們可以看到ssh為密文傳輸
圖形接口
XDMCP,VNC,XRDP等
文字接口ssh連接服務(wù)器
ssh(Secure Shell Protocol,安全殼程序協(xié)議)由IETF的網(wǎng)絡(luò)小組(Network Working Group)所制定,可以通過數(shù)據(jù)包加密技術(shù)將等待傳輸?shù)臄?shù)據(jù)包加密后再傳輸?shù)骄W(wǎng)絡(luò)上。ssh協(xié)議本身提供兩個服務(wù)器功能:
一個是類似telnet的遠程連接使用shell的服務(wù)器;另一個就是類似ftp服務(wù)的sftp-server,提供更安全的ftp服務(wù)。
淺淺介紹一下加密技術(shù)
明文:原始消息
密文:加密后的消息
密鑰:加解密的關(guān)鍵參數(shù)
加密算法:替換,位置移動等等
凱撒加密
明文:hello
密鑰:3
參考:
abcdefghijklmnopq...
defghijklmnopqrstuv...
密文:KHOOR
加密分類
對稱加密
加解密使用同一個密鑰,DES
非對稱加密
加解密雙方各用一對密鑰,公鑰和私鑰
公鑰:公共密鑰,存儲在公共的設(shè)備上,任何用戶都可以獲取私鑰:私有密鑰,存儲在個人計算機設(shè)備上,只有自己可以使用使用公鑰加密必須使用私鑰加密,使用私鑰加密必須使用公鑰解密
非對稱加密方法(也叫公鑰加密)
bob 公鑰b 私鑰b
alice 公鑰a 私鑰a
1.bob 公鑰b加密 <------> alice 私鑰b解密 (不成立)
2.bob 公鑰a加密 <------> alice 私鑰a解密 (能保證數(shù)據(jù)安全,但不能保證身份驗證)
3.bob 私鑰b加密 <------> alice 公鑰b解密 (能進行身份驗證,但不能保證數(shù)據(jù)安全)
4.bob 私鑰a加密 <------> alice 公鑰a解密 (不成立)
所以,在生產(chǎn)中,也就只能使用23方法
非對稱加密使用rsa算法
數(shù)字證書
ssh兩大類認證方式:
1.傳統(tǒng)的密碼認證
2.密鑰認證
連接加密技術(shù)簡介
目前常見的網(wǎng)絡(luò)數(shù)據(jù)包加密技術(shù)通常是通過非對稱密鑰系統(tǒng)來處理的主要通過兩把不一樣的公鑰與私鑰來進行加密與解密的過程
密鑰解析
公鑰(public key):提供給遠程主機進行數(shù)據(jù)加密的行為,所有人都可獲得你的公鑰來將數(shù)據(jù)加密私鑰(private key):遠程主機用你的公鑰加密的數(shù)據(jù),在本地端就能使用私鑰來進行加密,私鑰只有自己擁有。
ssh工作過程
服務(wù)端與客戶端要經(jīng)歷如下5個階段
版本協(xié)商階段
服務(wù)器端打開端口22(端口不會單獨出現(xiàn),必須和upd和tcp進行綁定),等待客戶端連接;客戶端向服務(wù)器端發(fā)起TCP初始連接請求,TCP連接建立后,服務(wù)器向客戶端發(fā)送第一個報文,包括版本標志字符串,格式為SSH-<主協(xié)議版本號>.<次協(xié)議版本號>.<軟件版本號>,協(xié)議版本號由主版本號和次版本號組成,軟件版本號主要是為調(diào)試使用??蛻舳耸盏綀笪暮螅馕鲈摂?shù)據(jù)包,如果服務(wù)器的協(xié)議版本號比自己的低,且客戶端能支持服務(wù)器端的低版本,就使用服務(wù)器端的低版本協(xié)議號,否則使用自己的協(xié)議版本號??蛻舳嘶貞?yīng)服務(wù)器一個報文,包含了客戶端決定使用的協(xié)議版本號。服務(wù)器比較客戶端發(fā)來的版本號,決定是否能同客戶端一起工作。如果協(xié)商成功,則進入密鑰和算法協(xié)商階段,否則服務(wù)器斷開TCP連接注意:上述報文都是采用明文方式傳輸
密鑰和算法協(xié)商階段
服務(wù)器端和客戶端分別發(fā)送算法協(xié)商報文給對端,報文中包含自己支持的公鑰算法列表、加密算法列表、MAC(Message Authentication Code,消息驗證碼)算法列表、壓縮算法列表等等服務(wù)器端和客戶端根據(jù)對端和本端支持的算法列表得出最終使用的算法服務(wù)器端和客戶端利用DH交換(Diffie-Hellman Exchange)算法、主機密鑰對等參數(shù),生成會話密鑰和會話ID。由此,服務(wù)器端和客戶端就取得了相同的會話密鑰和會話ID。對于后續(xù)傳輸?shù)臄?shù)據(jù),兩端都會使用會話密鑰進行加密和解密,保證了數(shù)據(jù)傳送的安全。在認證階段,兩端會使用會話用于認證過程會話密鑰的生成:
客戶端需要使用適當?shù)目蛻舳顺绦騺碚埱筮B接服務(wù)器,服務(wù)器將服務(wù)器的公鑰發(fā)送給客戶端。(服務(wù)器的公鑰產(chǎn)生過程:服務(wù)器每次啟動sshd服務(wù)時,該服務(wù)會主動去找/etc/ssh/ssh_host*文件,若系統(tǒng)剛裝完,由于沒有這些公鑰文件,因此sshd會主動去計算出這些需要的公鑰文件,同時也會計算出服務(wù)器自己所需要的私鑰文件。)服務(wù)器生成會話ID,并將會話ID發(fā)給客戶端。若客戶端第一次連接到此服務(wù)器,則會將服務(wù)器的公鑰數(shù)據(jù)記錄到客戶端的用戶主目錄內(nèi)的~/.ssh/known_hosts。若是已經(jīng)記錄過該服務(wù)器的公鑰數(shù)據(jù),則客戶端會去比對此次接收到的與之前的記錄是否有差異??蛻舳松蓵捗荑€,并用服務(wù)器的公鑰加密后,發(fā)送給服務(wù)器。服務(wù)器用自己的私鑰將收到的數(shù)據(jù)解密,獲得會話密鑰。服務(wù)器和客戶端都知道了會話密鑰,以后的傳輸都將被會話密鑰加密
認證階段(兩種認證方法)
基于口令的認證(password認證):客戶端向服務(wù)器發(fā)出password認證請求,將用戶名和密碼加密后發(fā)送給服務(wù)器,服務(wù)器將該信息解密后得到用戶名和密碼的明文,與設(shè)備上保存的用戶名和密碼進行比較,并返回認證成功或失敗消息?;诿荑€的認證(publickey認證):
客戶端產(chǎn)生一對公共密鑰,將公鑰保存到將要登錄的服務(wù)器上的那個賬號的家目錄的.ssh/authorized_keys文件中認證階段:客戶端首先將公鑰傳給服務(wù)器端。服務(wù)器端收到公鑰后會與本地該賬號家目錄下的authorized_keys中的公鑰進行對比,如果不相同,則認證失??;否則服務(wù)端生成一段隨機字符串,并先后用客戶端公鑰和會話密鑰對其加密,發(fā)送給客戶端??蛻舳耸盏胶髮⒔饷芎蟮碾S機字符串用會話密鑰發(fā)送給服務(wù)器。如果發(fā)回的字符串與服務(wù)器端之前生成的一樣,則認證通過,否則,認證失敗。 注:服務(wù)器端對客戶端進行認證,如果認證失敗,則向客戶端發(fā)送認證失敗消息,其中包含可以再次認證的方法列表。客戶端從認證方法列表中選取一種認證方法再次進行認證,該過程反復(fù)進行。直到認證成功或者認證次數(shù)達到上限,服務(wù)器關(guān)閉連接為止
ssh服務(wù)配置
安裝ssh
[root@server ~]# yum install openssh-server -y
[root@server ~]# systemctl status sshd
配置文件分析
[root@server ~]# vim /etc/ssh/sshd_config
21.#Port 22 # 默認監(jiān)聽22端口,可修改
22.#AddressFamily any # IPV4和IPV6協(xié)議家族用哪個,any表示二者均有
23.#ListenAddress 0.0.0.0 # 指明監(jiān)控的地址,0.0.0.0表示本機的所有地址(默認可修改)
24.#ListenAddress :: # 指明監(jiān)聽的IPV6的所有地址格式
26.#HostKey /etc/ssh/ssh_host_rsa_key # rsa私鑰認證,默認
27.#HostKey /etc/ssh/ssh_host_ecdsa_key # ecdsa私鑰認證
28.#HostKey /etc/ssh/ssh_host_ed25519_key # ed25519私鑰認證
34 #SyslogFacility AUTH # ssh登錄系統(tǒng)的時會記錄信息并保存在/var/log/secure
35.#LogLevel INFO # 日志的等級
39.#LoginGraceTime 2m # 登錄的寬限時間,默認2分鐘沒有輸入密碼,則自動斷開連接
40 #PermitRootLogin prohibit-password # 只允許root以密鑰形式登錄,不能以密碼的方式登錄 可以設(shè)置PermitRootLogin yes,允許管理員登錄
41.#StrictModes yes # 是否讓sshd去檢查用戶主目錄或相關(guān)文件的權(quán)限數(shù)據(jù)
42.#MaxAuthTries 6 # 最大認證嘗試次數(shù),最多可以嘗試6次輸入密碼。之后需要等待某段時間后才能再次輸入密碼
43.#MaxSessions 10 # 允許的最大會話數(shù)
49.AuthorizedKeysFile .ssh/authorized_keys # 選擇基于密鑰驗證時,客戶端生成一對公私鑰之后,會將公鑰放到.ssh/authorizd_keys里面
65 #PasswordAuthentication yes # 登錄ssh時是否進行密碼驗證
66 #PermitEmptyPasswords no # 登錄ssh時是否允許密碼為空
……
123.Subsystem sftp /usr/libexec/openssh/sftp-server #支持 SFTP ,如果注釋掉,則不支持sftp連接
AllowUsers user1 user2 #登錄白名單(默認沒有這個配置,需要自己手動添加),允許遠程登錄的用戶。如果名單中沒有的用戶,則提示拒絕登錄
ssh實驗
實驗1
配置ssh監(jiān)聽端口號第一步:server端操作,編輯配置文件
[root@server ~]# vim /etc/ssh/sshd_config
Port 2222 # 修改第21行參數(shù),去掉#,改為2222
第二步:server端操作,重啟服務(wù)
[root@server ~]# systemctl restart sshd
[root@server ~]# netstat -ntlp # 查看端口號是否改變
第三步:node1端操作,ssh登錄服務(wù)器
[root@node1 ~]# ssh root@192.168.80.129 # 默認登錄會被拒絕,因為我們已經(jīng)把端口號改了
ssh: connect to host 192.168.80.129 port 22: Connection refused
[root@node1 ~]# ssh -p 2222 root@192.168.80.129 # 使用-p執(zhí)行端口登錄
[root@server ~]#
注意:修改ssh端口號必須關(guān)閉selinux,或者說只要涉及修改端口的操作,都需要關(guān)閉selinux
# 定位server端,修改會原來的22端口
[root@server ~]# vim /etc/ssh/sshd_config
Port 22 # 修改第21行參數(shù),去掉#,改為22
[root@server ~]# systemctl restart sshd
[root@server ~]# netstat -ntlp
# 開啟selinux
[root@server ~]# vim /etc/selinux/config
SELINUX=enforcing # 改為enforcing即開啟
[root@server ~]# reboot # 重啟生效,等待
[root@server ~]# vim /etc/ssh/sshd_config # 重新修改端口號為2222
Port 2222
#重啟服務(wù)后會報錯,selinux會攔截端口號修改
[root@server ~]# systemctl restart sshd
Job for sshd.service failed because the control process exited with error code.
See "systemctl status sshd.service" and "journalctl -xeu sshd.service" for details. # 輸入這兩條提示命令可以進行排錯
[root@server ~]# setenforce 0 # 臨時關(guān)閉selinux,為1表示開啟selinux
[root@server ~]# getenforce # 查看selinux狀態(tài)
Permissive # 臨時關(guān)閉,不攔截但會記錄行為
[root@server ~]# systemctl restart sshd # 臨時關(guān)閉selinux后重啟服務(wù)成功
注意:修改端口這類的系統(tǒng)參數(shù),需要關(guān)閉selinux或配置selinux讓其放行
實驗2
拒絕root賬戶遠程登錄方法:使用配置文件中的Permitrootlogin參數(shù)進行實現(xiàn)參數(shù)值: 注意:RHEL9系統(tǒng)在安裝系統(tǒng)時設(shè)置了允許使用root使用密碼登錄ssh時,在 /etc/ssh/sshd_config.d目錄下會多一個文件01-permitrootlogin.conf,該文件會單獨記錄Permitrootlogin yes參數(shù),所以在設(shè)置允許root賬戶登錄ssh時應(yīng)在該文件中設(shè)置
[root@server ~]# ll /etc/ssh/sshd_config.d
總用量 8
-rw-r--r--. 1 root root 141 11月 10 23:42 01-permitrootlogin.conf
-rw-------. 1 root root 719 10月 30 18:23 50-redhat.conf
第一步:定位server,編輯配置文件
[root@server ~]# vim /etc/ssh/sshd_config.d/01-permitrootlogin.conf
PermitRootLogin no # yes修改為no,表示拒絕以root身份登錄服務(wù)器
[root@server ~]# systemctl restart sshd
第二步:定位node1,測試遠程登錄
[root@node1 ~]# ssh -p 2222 root@192.168.48.130 # 以root身份登錄被拒絕
root@192.168.48.130's password:
Permission denied, please try again.
ubuntu
root@ubuntu:~# grep -i permitroot /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
# the setting of "PermitRootLogin without-password".
實驗3
虛擬機之間實現(xiàn)免密登錄
在做實驗3之前,我們西安介紹一些基礎(chǔ)知識
ssh-keygen命令:用于生成,管理密鑰格式
[root@server ~]# ssh-keygen -t rsa
分析
-t:指定加密類型rsa:rsa公鑰加密算法,可以產(chǎn)生公鑰和私鑰注意:執(zhí)行后對應(yīng)賬戶目錄下的隱藏目錄.ssh中會有2個文件:
/root/.ssh/id_rsa:本機私鑰文件/root/.ssh/id_rsa.pub:本機公鑰文件 第一步:定位node1,制作公私對
[root@node1 ~]# ssh-keygen -t rsa
第二步:定位node1,將公鑰上傳
[root@node1 ~]# ssh-copy-id root@192.168.80.129 # 將node1公鑰上傳給129主機
The authenticity of host '192.168.48.130 (192.168.48.130)' can't be established.
ED25519 key fingerprint is SHA256:K7nvJFkfIh+p9YytEGR44wLbTfpB0Y52oVou0UdG6nc.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes #輸入
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.48.130's password: # 輸入登錄密碼
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.48.130'"
and check to make sure that only the key(s) you wanted were added.
第三步:客戶端測試,在node1端進行ssh登錄
[root@node1 ~]# ssh root@192.168.80.129
Activate the web console with: systemctl enable --now cockpit.socket
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last failed login: Sun Nov 19 15:34:55 CST 2023 from 192.168.80.130 on ssh:notty
There were 6 failed login attempts since the last successful login.
Last login: Sun Nov 19 14:38:54 2023 from 192.168.80.1
[root@server ~]#
第四步:由于目標時雙向免密,只需要在server端制作公私鑰對,將其上傳給node1端即可
[root@server ~]# ssh-keygen -t rsa #當這條命令一執(zhí)行后,就會在當前用戶的家目錄下會有一個.ssh的目錄,.ssh下會有id_rsa 和 id_rsa.pub
[root@server ~]# ssh-copy-id root@192.168.80.130 # 當這條命令執(zhí)行后,192.168.80.130這臺主機上的當前用戶的家目錄下的.ssh目錄下會出現(xiàn)authorized_keys這個文本
[root@server ~]# ssh root@192.168.80.130
Activate the web console with: systemctl enable --now cockpit.socket
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Sun Nov 19 15:42:21 2023 from 192.168.80.129
[root@node1 ~]#
最終實驗3完成
實驗4
xshell使用密鑰登錄之前xshell使用的時密碼登錄,現(xiàn)在通過密鑰的配置,實現(xiàn)無密碼登錄
# 注意:以下步驟檢查后若有authorized_keys文件則可忽略
# 先在服務(wù)器端檢查/root/.ssh/authorized_keys是否存在,它是存儲公鑰的文件,若不存在需要創(chuàng)建
# 服務(wù)器端操作
[root@server ~]# cd /root
[root@server ~]# ls -a # 先檢查
[root@server ~]# mkdir .ssh
[root@server ~]# cd .ssh
[root@server .ssh]# vim authorized_keys
#有時需要注意.ssh目錄的權(quán)限
柚子快報邀請碼778899分享:運維 詳解ssh遠程登錄服務(wù)
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。