ssh密鑰驗證

SSH遠程管理服務

1,定義

  • SSH是一種安全通道協議,是用來實現字符界面的遠程登陸,遠程複製等功能的,我們日常生活可以使用該功能來進行遠程操控,省去了很多麻煩。

  • SSH協議對通信雙方的數據進行了加密處理,其中包括用戶登陸時輸入的用戶口令。因此SSH協議具有很好的安全性

2,SSH支持的客戶端和服務端

  • SSH客戶端:Putty,Xshall,CRT
  • SSH服務端:OpenSSH

3,配置文件

  • 我們正在使用的centos7系統已經默認安裝openssh相關的軟件包,並且已經將sshd服務添加爲開機自啓。

  • 執行“systemctl start sshd”命令即可啓動sshd服務

  • sshd服務默認使用的是TCP的22端口

  • sshd服務的默認配置文件爲/etc/ssh/sshd_config
    注:ssh_config和sshd_config都是ssh服務器的配置文件前者是
    針對客戶端的配置文件,後者則是針對服務器的配置文件

    下面是sshd_config的重要配置

Port 22                                         #監聽端口22
ListenAddress 0.0.0.0                  #監聽地址爲任意網段,也可以指定OpenSSH服務器的具體IP

LoginGraceTime 2m                       #登陸驗證時間爲2分鐘
PermitRootLogin no                        #禁止root用戶登錄
MaxAuthTries 6                               #最大重試次數爲6

PermitEmptyPasswords no              #禁止空密碼用戶登錄
UseDNS no                                       #禁止DNS反向解析,以提高服務器的響應速度

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

示例

#只允許zhaohua,muzi,用戶登錄,且其中muzi用戶僅能夠從ip地址爲192.168.199.30的主機遠程登陸
AllowUsers zhaohua [email protected]     #多個用戶以空格分離


#禁止某些用戶登錄,用法和Allowusers類似(不要同時使用)
Denyusers zhaohua

SSHD服務驗證

兩種驗證方式

1.密碼驗證

最基本的對服務器中本地系統用戶的登錄名稱,密碼進行驗證。非常簡單,但容易被破解。所以我們不推薦如此使用。

2.密鑰對驗證

要求提供相匹配的密鑰信息才能通過驗證。通過先在客戶端中創建一對密鑰文件(公鑰,私鑰),然後將公鑰文件放到服務器中的之的指定位置。遠程登陸時,系統將公鑰,私鑰進行加密,解密關聯驗證。能增強安全性,並且還可以免交互登錄。

公鑰和私鑰的關係

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

當我們密碼驗證和密鑰對驗證都開啓時,優先使用密鑰對驗證。當然,我們也可以根據實際情況來進行設置驗證方式。

1.開啓密鑰和密碼驗證

PasswordAuthentication yes #啓用密碼驗證
PubkeyAuthentication yes  #啓用密鑰對驗證
AuthorizedKeysFile      .ssh/authorized_keys   #指定公鑰庫文件

在這裏插入圖片描述

2.使用SSH客戶端程序

1,ssh遠程登陸

當用戶第一次登陸SSH服務器時,必須接受服務器發來的的ECDSA密鑰(根據提示輸入“yes”)然後再輸入密碼,驗證成功就可以登錄了。
命令

ssh  用戶@IP地址
例: ssh [email protected]
-p :指定非默認的端口號,缺省時默認使用22端口

在這裏插入圖片描述

3.scp遠程複製

  • 下行復制
    命令
scp [email protected]:/etc/locale.conf /root/sshfuzhi.txt  
scp  -r [email protected]:/etc/lvm /root/sshfuzhi.txt  #複製目錄時需加-r,表示遞歸複製

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

  • 上行復制
    命令
scp -r /etc/ssh/ [email protected]:/opt

在這裏插入圖片描述

sftp(安全ftp)

因爲ssh使用了加密和解密技術,所以安全性比普通的FTP要高,但是傳輸速率要更低。
命令

sftp [email protected] #登錄到[email protected]
sftp> get [-r] 文件或目錄 文件保存位置(可缺省,缺省時代表複製到當前目錄)        #當要傳輸目錄時,需要加入-r代表遞歸複製 ,將遠程主機的文件下載到我們的主機上
sftp>put [-r] #將我們本機的文件,上傳到遠程主機上

首先,我們先要登錄到遠程主機上面;
在這裏插入圖片描述
登陸後,我們可以利用ls查看對方的目錄,或者直接進行傳輸,將對方的an文件傳輸到我們的opt目錄。

在這裏插入圖片描述
或者使用put指令,將我們主機上面的文件傳輸到對方主機
在這裏插入圖片描述
上傳之後我們可以進行查詢,看看是否傳輸成功。
在這裏插入圖片描述
或者我們可以指定接收目錄,將我們的文件傳輸到該目錄
在這裏插入圖片描述





配置密鑰對驗證

1,在客戶端創建密鑰對

  • 通過ssh-keygen工具爲當前用戶創建密鑰對文件。可用的加密算法爲RSA,ECDSA或DSA等(ssh-keygen命令的“-t”選項用於指定算法類型)

可以先建立一個admin用戶

useradd admin
echo "123123" | passwd --stdin admin
su -admin

然後再進行創建密鑰對

ssh-keygen -t ecdsa
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:    #確認輸入

在這裏插入圖片描述

2.查看密鑰位置

在配置完密鑰對之後,我們可以進行查看密鑰對來確認,密鑰對存放於.ssh中,通過以下命令可以進行查看

ls -l ~/.ssh/id_ecdsa*
-rw------- 1 admin admin 314 12月  9 15:10 /home/admin/.ssh/id_ecdsa
-rw-r--r-- 1 admin admin 189 12月  9 15:10 /home/admin/.ssh/id_ecdsa.pub

在這裏插入圖片描述

3.查看公鑰文本

cat authorized_keys #這時已經在.ssh/目錄下了,所以使用相對路徑

在這裏插入圖片描述

4.將公鑰文件上傳至服務器並且導入

後面我們就應該將公鑰導入服務器中,讓服務器與客戶端進行配對

ssh-copy-id -i id_ecdsa.pub [email protected]  #可以直接在服務器的/home/zhao/.ssh/目錄中導入公鑰文本

在這裏插入圖片描述

5.最後進行密鑰驗證登錄

ssh [email protected]  #使用密鑰對驗證
Enter passphrase for key '/home/admin/.ssh/id_ecdsa':  #輸入私鑰的密碼

在這裏插入圖片描述
在這裏插入圖片描述

TCP Wrapper(訪問控制)

定義

  • 將TCP服務程序“包裹”起來,代爲監聽TCP服務程序的端口,增加了一個安全檢測的過程,外來的連接請求必須先通過這層安全檢測,獲得許可後才能真正訪問對應的服務程序。
  • 對於大多是的Linux發行版來說,TCP Wrappers 是默認提供的共嗯那個。

TCP Wrapper保護機制的兩種實現方式

  • 1,直接使用tcpd程序對其他服務程序進行保護,需要運行tcpd程序
  • 2,由其他網絡服務程序調用libwrap.so.*鏈接庫,不需要運行tcpd程序。此方式的應用更加廣泛,也更有效率。

TCP Wrapper的格式

<服務程序列表>:<客戶端地址列表>

(1)服務程序列表

ALL:代表所有的服務。
單個服務程序:如“vsftpd"。
多個服務程序組成的列表:如"vsftpd,sshd"。

(2)客戶端地址列表

ALL:代表任何客戶端地址。
LOCAL:代表本機地址。
多個地址以逗號分隔
允許使用通配符“*”和“?”,前者代表任意長度字符,後者僅代表一個字符
網段地址,如“192.168.199.”或者192.168.199.0/255.255.255.0
區域地址,如".benet.com”匹配benet.com域中的所有主機。




TCP wrappers 機制的基本原則:

基本策略

  • 首先檢查/etc/hosts.allow文件,如果找到相匹配的策略,則允許訪問;
  • 否則繼續檢查/etc/hosts.deny文件,如果找到相匹配的策略,則拒絕訪問;
  • 如果檢查上述兩個文件都找不到相匹配的策略,則允許訪問。

常用情況

  • "允許所有,拒絕個別”
    只需在/etc/ hosts.deny文件中添加相應的拒絕策略
  • ”允許個別,拒絕所有”
    除了在/etc/hosts.allow中添加允許策略之外,還需要在/etc/hosts.deny文件中設置""ALL:ALL"的拒絕策略。

示例

比如我們在192.168.199.0網段中,我們只想讓192.168.199.20訪問192.168.199.30,需要做如下設置

先在/etc/hosts.allow設置只允許20IP通過
在這裏插入圖片描述

然後再在/etc/ hosts.deny中不允許所有網段通過

在這裏插入圖片描述

之後我們就發現10IP已經無法進入了,但20IP還是可以進入。

在這裏插入圖片描述
在這裏插入圖片描述

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