SSH遠端訪問及控制

傲世九天發表於2024-05-05

SSH遠端訪問及控制

目錄
  • SSH遠端訪問及控制
    • 一、SSH遠端管理
      • 1、SSH的概述
    • 二、配置OpenSSH1伺服器
      • 1、sshd_config配置檔案的常用選項設定
      • 2、例項操作
    • 三、sshd服務支援登入驗證方式有:密碼驗證和金鑰對驗證,可以設定只使用其中一種,也可以都啟用
      • 3.1 密碼驗證:
      • 3.2 金鑰對驗證:
    • 四、配置金鑰對驗證
      • 1.在客戶端建立金鑰對
      • 2.將公鑰檔案.上傳至伺服器
      • 3.在伺服器中匯入公鑰文字
      • 4.在客戶端使用金鑰對驗證、在客戶機設定ssh代理功能,實現免互動登入

一、SSH遠端管理

1、SSH的概述

  • SSH是一種安全通道協議,主要用來實現字元介面的遠端登入、遠端複製等功能;
  • 對通訊雙方的資料傳輸進行加密處理,其中包括使用者登入時輸入的使用者口令;
  • 與早期的Telnet(遠端登入)、rsh(遠端執行命令)、rcp(遠端檔案控制)等相比,SSH協議提供了更好的安全性

image-20240504170320923

• SSH客戶端: Putty、 Xshell、 CRT

• SSH服務端: OpenSSH

✔ OpenSSH 是實現SSH 協議的開源軟體專案,適用於各種UNIX、Linux 作業系統

✔ Centos 7系統預設已安裝openssh相關軟體包,並已將sshd 服務新增為開機自啟動

✔ 執行“systemctl start sshd" 命令即可啟動sshd 服務

✔ sshd服務預設使用的是TCP的22埠

✔ sshd服務的預設配置檔案是/etc/ssh/sshd_config

ssh_config和sshd_config都是ssh伺服器的配置檔案,二者區別在於前者是針對客戶端的配置檔案,後者則是針對服務端的配置檔案

2、SSH的原理

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

image-20240504185822666

二、配置OpenSSH1伺服器

1、sshd_config配置檔案的常用選項設定

vim /etc/ssh/sshd_config                    #服務端配置檔案
#Port 22                        #監埠為22
#AddressFamily any                  #監聽地址為任意網路卡,也可以指定Openssh伺服器的具體ip
#LoginGraceTime 2m                  #登入驗證時間為2分鐘W
#PermitRootLogin yes                        #禁止root使用者登入
#MaxAuthTries 6                     #最大重試次數為 6
#PermitEmptyPasswords no                    #禁止空密碼使用者登入
#UseDNS no                          #禁用DNS反向解析,以提高伺服器的響應速度
----------------------------------------------------------------------------------
配置允許和禁止使用者登入:加@表示限制ip,注意允許和禁止不要同時使用!!
AllowUsers wangwu                 #允許wangwu登入(多個使用者以空格間隔)
AllowUsers wangwu@192.168.125.80                   #只允許zhangsan透過192.168.80.80登入
DenyUsers lisi                      #禁止lisi登入

2、例項操作

image-20240504191501518

image-20240504191708390

image-20240504192053294

三、sshd服務支援登入驗證方式有:密碼驗證和金鑰對驗證,可以設定只使用其中一種,也可以都啟用

3.1 密碼驗證:

以伺服器中本地系統使用者的登入名稱、密碼進行驗證。

這種方式使用最為簡便,但從客戶機角度來看,正在連線的伺服器有可能被假冒,從伺服器角度來看,當遭遇密碼暴力破解攻擊時防禦能力比較弱。

3.2 金鑰對驗證:

要求提供相匹配的金鑰資訊才能透過驗證,通常先在客戶機中建立一對金鑰檔案(公鑰和私鑰),然後將公鑰檔案放到伺服器中的指定位置。

遠端登入時,系統將使用公鑰、私鑰進行加密/解密關聯驗證,增強了遠端管理的安全性。

公鑰和私鑰是成對生成的,這兩個金鑰互不相同,可以互相加密和解密;
不能根據一個密碼來推算出另一個金鑰;
公鑰對外公開,私鑰只有私鑰的持有人才知道。

公鑰和私鑰要配對使用,如果用公鑰對資料進行加密,只有用相對應的私鑰才能解密;如果用私鑰對資料進行加密,那麼只有對應的公鑰才能解密。

當密碼驗證、金鑰對驗證都啟用時,伺服器將優先使用金鑰對驗證。

對於安全性要求較高的伺服器,建議將密碼驗證方式禁用,只允許啟用金鑰對驗證方式;若沒有特殊要求,則兩種方式都可以。

可根據實際情況設定驗證方式:

vim /etc/ssh/sshd_config
PasswordAuthentication yes                         #啟用密碼驗證
PubkeyAuthentication yes                           #啟用金鑰對驗證
AuthorizedKeysFile  .ssh/ authorized_keys         #指定公鑰庫檔案.

四、配置金鑰對驗證

1.在客戶端建立金鑰對

透過ssh-keygen工具為當前使用者建立金鑰對檔案。可用的加密演算法為RSA、ECDSA或DSA等 ( ssh- keygen命令的“-t”選項用於指定演算法型別

首先建立賬戶:admin
useradd admin                                   #建立新使用者
echo "123456" | passwd --stdin admin                                    #設定密碼
su admin                                    #切換到admin使用者
 
ssh-keygen -t ecdsa                             #使用ssh-keygen進行加密
Generating public/private ecdsa key pair.      
Enter file in which to save the key (/home/admin/.ssh/id_ecdsa):        #指定私鑰位置,回車選擇預設
Created directory '/home/admin/.ssh'.                           #告訴我們生成的金鑰對存放在目錄中的隱藏目錄.ssh、下
Enter passphrase (empty for no passphrase):                             #設定私鑰的密碼
Enter same passphrase again:                            #再次確認
 
ls -l ~/.ssh/id_ecdsa*                                  #可以檢視到生成的金鑰對檔案
/home/admin/.ssh/id_ecdsa                               #這是私鑰檔案,許可權預設為600
/home/admin/.ssh/id_ecdsa.pub                                   #這是公鑰檔案,用來提供給SSH伺服器  

2.將公鑰檔案.上傳至伺服器

scp ~/.ssh/id_ecdsa.pub root@192.168.80.80:/opt         #將自己的公鑰檔案上傳到伺服器的opt目錄下 
或  
cd ~/.ssh                                   #切換到金鑰對所在目錄,此方法在服務端建立好zhangsan使用者,使用此方法直接跳過第三步
ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.229.10     #這個方法可以直接在服務的/home/zhangsan/,ssh/目錄中匯入公鑰文字   

3.在伺服器中匯入公鑰文字

useradd zhangsan                                        #新增新使用者zhangsan
echo "123456" | passwd -- stdin zhangsan                                        #設定密碼
mkdir /home/zhangsan/.ssh/                                      #建立zhangsan的.ssh目錄
cat /opt/id_ecdsa.pub >> /home/zhangsan/.ssh/authorized_keys                                  #將從客戶端接受的公鑰匯入到zhangsan的公鑰庫中
cat /home/zhangsan/.ssh/authorized_keys                                         #使用cat命令進行檢視確定  

4.在客戶端使用金鑰對驗證、在客戶機設定ssh代理功能,實現免互動登入

ssh zhangsan@192.168.229.20                             #使用金鑰進行遠端連線驗證
Enter passphrase for key '/home/admin/.ssh/id_ecdsa':                                   #輸入私鑰的密碼進行驗證
exit                                            #退出伺服器端
ssh-agent bash                                      #對客戶機設定ssh代理功能,實現面互動登入     
ssh-add
Enter passphrase for /home/admin/.ssh/id_ecdsa:                                 #輸入私鑰進行確定
ssh zhangsan@192.168.80.80                              #再次遠端連線伺服器的時候無需輸入密碼 

相關文章