SSH遠端登入保姆級教程:從零到精通,告別連線失敗!

SSH遠端登入保姆級教程:從零到精通,告別連線失敗!

SSH遠端登入與控制


一 什麼是ssh伺服器

SSH(Secure Shell)是一種安全通道協議,主要用來實現字元介面的遠端登入、遠端 複製等功能。SSH 協議對通訊雙方的資料傳輸進行了加密處理,其中包括使用者登入時輸入的使用者口令,SSH 為建立在應用層和傳輸層基礎上的安全協議。對資料進行壓縮,加快傳輸速度。
SSH客戶端<————–網路—————->SSH服務端

1 協議型別

  • • SSH(Secure Shell):SSH是一種加密網路協議,用於透過安全通道在不安全網路上進行遠端訪問和管理。它提供了加密的通訊會話,包括遠端登入和執行命令,以及傳輸檔案等功能
  • • Telnet:雖然不安全,但仍然被用於遠端登入到伺服器或裝置,通常用於簡單的文字互動
  • • RDP(Remote Desktop Protocol):主要用於Windows系統,允許使用者透過圖形介面遠端訪問另一臺計算機。
  • • VNC(Virtual Network Computing):允許使用者遠端控制另一臺計算機的圖形介面。它是跨平臺的遠端桌面協議。
  • • X11:用於在UNIX和Linux系統上進行圖形介面的遠端訪問。
  • • ICA(Independent Computing Architecture):由Citrix Systems開發,用於提供應用程式和桌面虛擬化服務

2 ssh協議優點

資料傳輸是加密的,可以防止資訊洩露
資料傳輸是壓縮的,可以提高傳輸速度
  • • 加密通訊:SSH協議透過加密技術,確保通訊過程中的資料傳輸是安全的,防止資料被竊聽或篡改
  • • **遠端登入:**使用者可以使用SSH協議遠端登入到其他計算機或伺服器,以便進行命令列操作、檔案管理等任務
  • • 加密身份驗證:SSH協議支援使用公鑰和私鑰對進行身份驗證,這種方式比傳統的基於密碼的身份驗證更加安全
  • • 埠轉發:SSH協議支援埠轉發,可以透過安全的通道在兩個計算機之間建立安全的連線
  • • 遠端執行命令:SSH允許使用者在遠端主機上執行命令,這對於自動化指令碼和遠端管理非常有用
  • • 檔案傳輸:SSH協議還支援安全的檔案傳輸,可以在客戶端和伺服器之間進行安全的檔案傳輸和管理
作用
sshd 服務使用 SSH 協議可以用來進行遠端控制,或在計算機之間傳送檔案。
ssh服務端主要包括兩個服務功能 ssh遠端連結和sftp服務(檔案傳輸功能)

3 SSH的 軟體

SSH 客戶端: xshell     putty      secureCRT      MobaXterm    finalshell 
SSH 服務端:openSSH (Centos 7 預設安裝)

4 有關係的程式

  • • OpenSSH:OpenSSH 是 SSH 協議的免費開源實現,包括伺服器端和客戶端程式。它支援加密和身份驗證功能,被廣泛用於Linux和類Unix系統上
  • • PuTTY:PuTTY 是一個流行的免費的SSH和Telnet客戶端程式,可在Windows平臺上使用。它提供了SSH連線所需的工具和功能
  • • WinSCP:WinSCP 是一個免費的SFTP、SCP和FTP客戶端程式,用於在Windows平臺上與遠端計算機進行安全檔案傳輸。它支援SSH協議,提供了使用者友好的介面
  • • SecureCRT:SecureCRT 是一個商業化的SSH客戶端程式,提供了強大的功能和定製選項,適用於Windows、Mac和Linux作業系統

5 公鑰傳輸原理

①客戶端發起連線請求
②服務端返回自己的公鑰,以及一個會話ID(這一步客戶端得到服務端公鑰)
③客戶端生成金鑰對
④客戶端用自己的公鑰或會話ID,計算出一個值Res,並用服務端的公鑰加密
⑤客戶端傳送加密後的值到服務端,服務端用金鑰解密,得到Res
⑥服務端用解密後的Res或者是會話ID,計算出客戶端的公鑰(這一步服務端得到客戶端公鑰)
⑦最終:雙方各持有三個金鑰,分別為自己的一對公鑰、私鑰、以及對方的公鑰,之後的所有的通訊都會被加密。

6 加密通訊原理

詳細闡釋:
首先ssh透過加密演算法在客戶端產生金鑰對(公鑰和私鑰),公鑰傳送給伺服器端,自己保留私鑰,如果要想連線到帶有公鑰的SSH伺服器,客戶端SSH軟體就會向SSH伺服器發出請求,請求用聯機的使用者金鑰進行安全驗證。SSH伺服器收到請求之後,會先在該SSH伺服器上連線的使用者的家目錄下

7 ssh遠端登入檔案

每次使用sshd登入到其他主機,雙方都會生成一個檔案known_hosts把對方主機的公鑰在.ssh/known_hosts檔案裡。

8 如何確定此臺機器就是我要連的機器?

  1. 1. ssh [選項] [email protected]         #指定登入使用者、目標主機地址作為引數
  2. 2.  ssh -p 20 [email protected]         #-p為指定埠

二 ssh命令 遠端連線

①直接連線:先輸入ssh  IP

第一次連線服務端機器會詢問是否要驗證公鑰,同意就會自動獲取服務端公鑰 

驗證是否連線正確服務機,可檢視服務端的公鑰 

②連線指定使用者

① ssh  使用者名稱@IP地址
②ssh  -l 使用者名稱  IP地址

③指定埠號

在  /etc/ssh/sshd_config檔案修改埠號 
sshd服務的預設埠號是 22,如果不是此埠,需要 -p 來指定埠
[root@localhost ~]#vim /etc/ssh/sshd_config

 [root@localhost ~]#systemctl restart sshd
在另一臺虛擬機器驗證,使用客戶機就需要指定埠號

跳板登入
提供了一種安全的方式管理和連線位於內部網路中的主機,同時限制了對內部網路的直接訪問
#在目標服務端主機上模擬防火牆拒絕客戶端連線,客戶端使用跳板連線到目標主機上[root@localhost .ssh]#iptables -A INPUT -s 192.168.11.5-j REJECT [root@localhost ~]#ssh -t 192.168.11.9 ssh 192.168.11.5

三  遠端登入直接執行操作命令

#ssh  192.168.11.9  ifconfig
**白名單:**預設拒絕所有,只有白名單上允許的人才可以訪問
**黑名單:**預設允許所有,只有黑名單上的使用者讓你不允許訪問
注意     實驗關閉防火牆  防護 黑白不能同時啟用

修改服務端配置檔案

root@localhost ~]#vim /etc/ssh/sshd_config

① 白名單,只能登入本機的mcb@使用者

別的使用者無法登入 

③禁止使用者登入 ,此實驗要反覆去做

借鑑他人[root@localhost ssh]#vim  /etc/ssh/sshd_config#開啟38 行 並改為 no,預設註釋並寫的yes38 PermitRootLogin no#注意雖然阻止了root 但是普通使用者可以使用su[root@localhost1 ~]#ssh [email protected] -p 9527zhangsan@192.168.91.100's password: Last login: Fri Aug 2716:50:352021[zhangsan@localhost2 ~]$ [zhangsan@localhost2 ~]$ su root密碼:[root@localhost2 zhangsan]#修改 pam認證模組[root@localhost ssh]#vim /etc/pam.d/su#開啟第6行,預設註釋6 auth            required        pam_wheel.so use_uid

vim /etc/ssh/sshd_config

 38 #PermitRootLogin yes    把yes該為noXshell就登陸不上
修改pam認證模組,只允許wheel組使用者可以使用    su
[root@localhost ~]# vim /etc/pam.d/su
 6 #auth           required        pam_wheel.so use_uid預設是註釋掉,要讓6行開啟
操作如下:
[root@localhost ~]# vim /etc/pam.d/su

太遺憾了,過程忘了

四 SSH服務的最佳實踐

①建議使用非預設埠22
vim /etc/ssh/sshd_config#找到以下兩個配置項:port  123       #設定特定的ssh服務埠號
②禁止使用  protocol version 1
因為SSH協議版本一存在多個已知的安全漏洞,其使用的加密演算法和金鑰交換機制相對較弱,易受到中間人攻擊等威脅
SSH 協議版本二已經成為現代標準,並且得到廣泛支援,絕大多數 SSH 客戶端和伺服器都預設使用協議版本二,而且很多安全性工具也不再支援協議版本一
③限制可登入使用者(白名單)
④設定空閒會話超時時長
vim /etc/ssh/sshd_config           #找到以下兩個配置項:ClientAliveInterval 0ClientAliveCountMax 3
ClientAliveInterval:表示伺服器向客戶端傳送空閒會話確認訊息的時間間隔,單位為秒。預設值為0,表示不傳送確認訊息。將其設定為一個正整數,表示每隔多長時間向客戶端傳送一次確認訊息。
ClientAliveCountMax:表示伺服器向客戶端傳送確認訊息後,客戶端沒有響應的最大次數。預設值為3,表示如果伺服器連續傳送3次確認訊息後,客戶端仍未響應,則認為客戶端已經斷開連線。將其設定為一個正整數,表示伺服器最多傳送多少次確認訊息後,認為客戶端已經斷開連線
⑤利用防火牆設定SSH訪問策略
#利用防火牆禁止特定IP地址:172.16.12.10訪問iptables -A INPUT -s 172.16.12.10 -j REJECT
⑥僅監聽特定的IP地址、公網、內網
vim /etc/ssh/sshd_config           #找到以下三個配置項:ClientAliveInterval 300ClientAliveCountMax 2ListenAddress 192.168.11.10
ClientAliveInterval:表示SSH伺服器將向客戶端傳送空閒會話檢查的時間間隔(以秒為單位),預設值為0,表示停用此功能
ClientAliveCountMax:表示SSH伺服器將向客戶端傳送空閒會話檢查的最大次數,如果達到此次數後仍未收到客戶端的響應,則會話將被終止,預設值為3
ListenAddress:監聽特定的IP地址的SSH連線
⑦基於口令認證時,使用強密碼策略
  1. 1. 比如:tr  -cd  [a-zA-Z0-9]  < /dev/random  |  head -c 12 | xargs
  2. 2. #設定12位的隨機密碼
⑧使用基於金鑰的認知
⑨禁止使用空密碼
vim /etc/ssh/sshd_config#找到以下一個配置項:PermitEmptyPasswords no #禁止使用空密碼
⑩禁止root使用者直接登入
11 限制ssh的訪問頻率和併發線上數
vim /etc/ssh/sshd_config           #找到以下一個配置項:MaxStartups 10                   #最多允許10個併發連線,如果超過這個數量,會拒絕新的連線
使用PAM模組:透過Pluggable Authentication Modules (PAM) 可以實現更復雜的控制,例如限制使用者的併發登入數 
使用防火牆:你也可以使用防火牆軟體如iptables來限制從特定IP地址發起的併發SSH連線數
12 經常分析日誌分離
獨立sshd服務日誌檔案:預設sshd服務日誌在/var/log/secure下,可透過rsyslog程式將sshd服務日誌檔案獨立出來放到特定的資料夾中,方便檢視和管理。(具體操作請檢視《Linux檔案系統與日誌分析》部落格)
使用日誌分析工具:可以使用工具如grep、awk、sed等來分析SSH日誌檔案。這些工具可以幫助搜尋特定的關鍵字、過濾資訊、提取有用的資料等
設定日誌輪轉:為了避免日誌檔案過大,可以配置日誌輪轉。透過日誌輪轉,舊的日誌檔案會被重新命名並壓縮,同時建立新的日誌檔案。可以使用logrotate工具來實現日誌輪轉,並在其配置檔案中指定SSH日誌檔案的處理方式(具體操作請檢視《Linux檔案系統與日誌分析》部落格) 

五 openSSH 伺服器配置檔案

openSSH是實現SSH協議的開源軟體專案,適用於各種UNIX、Linux作業系統
執行“systemctl start sshd”命令即可啟動sshd服務,預設埠使用的22埠
服務名稱:sshd服務端主程式:/usr/sbin/sshd  
服務端配置檔案:/etc/ssh/sshd_config 
客戶端配置檔案:/etc/ssh/ssh_config

1 ssh配置檔案資訊

在linux中實現ssh,是透過opsnSSH的sshd服務提供的

2 存放ssh服務端的配置檔案   /etc/ssh/sshd_config

[root@localhost ~]#vim /etc/ssh/sshd_config

 六  金鑰對免互動     驗證登入

   有密碼又無需輸入密碼

1 建立金鑰,生成rsa演算法金鑰

2 傳送到遠端主機

3 登入驗證

七 免互動登入

客戶端先輸入 ssh-agent  bash 將這個命令交給 bash 去管理
再輸入 ssh-add  是將使用者的私鑰新增到執行中的 ssh-agent 中,這樣在後續的SSH連線過程中,就不需要每次都手動輸入私鑰的密碼了。一旦私鑰被新增到ssh-agent 中,它會暫時儲存解密後的私鑰以供後續使用
[root@localhost .ssh]# ssh-agent bash                       #把sh-agent交給程序管理[root@localhost .ssh]# ssh-add                                  #把密碼交給sh-agent  Enter passphrase for /root/.ssh/id_rsa:                      #輸入金鑰檔案密碼Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)[root@localhost .ssh]# ssh 192.168.11.6         #無需密碼即可登入,重啟後失效Last login: Sun Jan 21 14:06:03 2024 from 192.168.11.9注:機器重啟就會失效
連結:https://blog.csdn.net/MCB134/article/details/135577909
(版權歸原作者所有,侵刪)
文末福利
就目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。
為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套高階運維工程師必備技能資料包,內容有多詳實豐富看下圖!
共有 20 個模組
1.38張最全工程師技能圖譜
2.面試大禮包
3.Linux書籍
4.go書籍
······
6.自動化運維工具
18.訊息佇列合集
 以上所有資料獲取請掃碼
備註:最新運維資料
100%免費領取
(後臺不再回復,掃碼一鍵領取