關于SSH服務解讀
一、SSH基礎
1.介紹
SSH(Secure Shell)是一種安全通道協(xié)議,主要用來實現(xiàn)字符界面的遠程登錄、遠程 復制等功能。
SSH 協(xié)議對通信雙方的數(shù)據(jù)傳輸進行了加密處理,其中包括用戶登錄時輸入的用戶口令,SSH 為建立在應用層和傳輸層基礎上的安全協(xié)議。
對數(shù)據(jù)進行壓縮,加快傳輸速度。
- SSH是一個應用層協(xié)議
- 實現(xiàn)Linux的遠程加密連接
- 適用于Linux服務器遠程管理
SSH客戶端<--------------網(wǎng)絡---------------->SSH服務端
2.優(yōu)點
- 數(shù)據(jù)傳輸是加密的,可以防止信息泄漏
- 數(shù)據(jù)傳輸是壓縮的,可以提高傳輸速度
3.作用
SSHD 服務使用 SSH 協(xié)議可以用來進行遠程控制,或在計算機之間傳送文件。
ssh服務端主要包括兩個服務功能 ssh遠程鏈接和sftp服務(文件傳輸功能)
SSH服務端口22/tcp
4.SSH 軟件
- SSH 客戶端:finalshell xshell putty secureCRT MobaXterm
- SSH 服務端:openSSH (Centos 7 默認安裝)
5.openSSH 服務器配置文件
- 服務名稱:sshd
- 服務端主程序:/usr/sbin/sshd
- 服務端配置文件:/etc/ssh/sshd_config
- 客戶端配置文件:/etc/ssh/ssh_config
openSSH是實現(xiàn)SSH協(xié)議的開源軟件項目,適用于各種UNIX、Linux操作系統(tǒng)。
執(zhí)行“systemctl start sshd”命令即可啟動sshd服務。默認端口使用的22端口。
ssh服務端主要包括兩個服務功能 ssh遠程鏈接和sftp服務(文件傳輸功能)
作用:SSHD 服務使用 SSH 協(xié)議可以用來進行遠程控制,或在計算機之間傳送文件。 相比較之前用 Telnet 方式來傳輸文件要安全很多,因為 Telnet 使用明文傳輸,SSH 是加密傳輸。
遠程管理linux系統(tǒng)基本上都要使用到ssh,原因很簡單:telnet、FTP等傳輸方式是?以明文傳送用戶認證信息,本質(zhì)上是不安全的,存在被網(wǎng)絡竊聽的危險。SSH(Secure Shell)目前較可靠,是專為遠程登錄會話和其他網(wǎng)絡服務提供安全性的協(xié)議。利用SSH協(xié)議可以有效防止遠程管理過程中的信息泄露問題,透過SSH可以對所有傳輸?shù)臄?shù)據(jù)進行加密,也能夠防止DNS欺騙和IP欺騙。
二、ssh原理
登陸:
1.公鑰傳輸原理
- 客戶端發(fā)起鏈接請求
- 服務端返回自己的公鑰,以及一個會話ID(這一步客戶端得到服務端公鑰)
- 客戶端生成密鑰對
- 客戶端用自己的公鑰異或會話ID,計算出一個值Res,并用服務端的公鑰加密
- 客戶端發(fā)送加密值到服務端,服務端用私鑰解密,得到Res
- 服務端用解密后的值Res異或會話ID,計算出客戶端的公鑰(這一步服務端得到客戶端公鑰)
- 最終:雙方各自持有三個秘鑰,分別為自己的一對公、私鑰,以及對方的公鑰,之后的所有通訊都會被加密
2.加密通訊原理
2.1 對稱加密:
概念:
采用單鑰密碼系統(tǒng)的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,由于其速度快,對稱性加密通常在消息發(fā)送方需要加密大量數(shù)據(jù)時使用。
常用算法:
對稱加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
特點:
1、加密方和解密方使用同一個密鑰;
2、加密解密的速度比較快,適合數(shù)據(jù)比較長時的使用;
3、密鑰傳輸?shù)倪^程不安全,且容易被破解,密鑰管理也比較麻煩;
優(yōu)缺點:
優(yōu)點:算法公開、計算量小、加密速度快、加密效率高
缺點:在數(shù)據(jù)傳送前,發(fā)送方和接收方必須商定好秘鑰,然后使雙方都能保存好秘鑰。其次如果一方的秘鑰被泄露,那么加密信息也就不安全了。另外,每對用戶每次使用對稱加密算法時,都需要使用其他人不知道的獨一秘鑰,這會使得收、發(fā)雙方所擁有的鑰匙數(shù)量巨大,密鑰管理成為雙方的負擔。
2.2 非對稱加密:
概念:
非對稱加密算法需要兩個密鑰:公開密鑰(publickey:簡稱公鑰)和私有密鑰(privatekey:簡稱私鑰)。公鑰與私鑰是一對,如果用公鑰對數(shù)據(jù)進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。
常用算法:
RSA:目前使用最廣泛的算法
DSA:數(shù)字簽名算法,和 RSA 不同的是 DSA僅能用于數(shù)字簽名,不能進行數(shù)據(jù)加密解密,其安全性和RSA相當,但其性能要比RSA快
ECC(橢圓曲線加密算法)
ECDSA:橢圓曲線簽名算法,是ECC和 DSA的結(jié)合,相比于RSA算法,ECC 可以使用更小的秘鑰,更高的效率,提供更高的安全保障
原理:
首先ssh通過加密算法在客戶端產(chǎn)生密鑰對(公鑰和私鑰),公鑰發(fā)送給服務器端,自己保留私鑰,如果要想連接到帶有公鑰的SSH服務器,客戶端SSH軟件就會向SSH服務器發(fā)出請求,請求用聯(lián)機的用戶密鑰進行安全驗證。SSH服務器收到請求之后,會先在該SSH服務器上連接的用戶的家目錄下。
優(yōu)缺點:
相比于對稱加密技術,非對稱加密技術安全性更好,但性能更慢
三、ssh的應用
1.ssh配置文件信息
在linux中實現(xiàn)ssh,是通過opsnSSH的sshd服務提供的
1.1.ssh服務端的配置文件:
/etc/ssh/sshd_config
1.2 存放ssh客戶端的配置文件
/etc/ssh/ssh_config
2.ssh的基本用法
選項:
- -l 選項,指定登錄名稱。
- -p 選項,指定登錄端口
- -t
2.1.直接連接ip地址:
格式:ssh ip地址
第一次連接時會詢問你是否要驗證公鑰,同意之后,下次登錄就會自動獲取服務端的公鑰
2.2.連接指定用戶:
- ssh 用戶名@ip地址
- ssh -l 用戶名 ip地址
2.3.連接指定端口號:
格式: ssh ip地址 -p 端口號
sshd服務的默認端口號是 22,如果不是此端口,需要 -p 來指定端口
在 /etc/ssh/sshd_config下面修改端口號
2.4.跳板機:
使用跳板是為了方便和安全
格式: ssh -t ip地址 ssh -t ip地址 ssh -t ip地址 ........
將172.16.195.3 做為中間跳板遠程連接 172.16.195.4
2.5.直接跟上命令遠程操作:
格式: ssh ip地址 想使用的命令
3. 黑白名單
白名單:默認拒絕所有,只有白名單上允許的人才可以訪問
黑名單:默認允許所有,只有黑名單上的用戶讓你不允許訪問
(白名單優(yōu)先級高,但一般不會同時使用白名單和黑名單,白名單使用會多一點)
3.1 白名單:
在172.16.195.3上
在 /etc/ssh/sshd_config 里手動添加
在空白處添加此內(nèi)容
在 172.16.195.4上連接
3.2黑名單:
在172.16.195.3上設置
用172.16.195.4上的gg用戶請求連接
連接不上
用172.16.195.4上的root用戶請求連接
連接上了
3.3.更改默認端口
打開配置文件——vim /etc/ssh/sshd_config
3.4.禁止root用戶登陸:
打開配置文件——vim /etc/ssh/sshd_config
在空白處添加
在172.16.195.3上
在172.16.195.4上
發(fā)現(xiàn)連接不上
但是可以切換用戶連接上
在pam.d/su配置文件上開啟
切換用戶也連接不上了
3.5. ssh服務的最佳實踐:
- 建議使用非默認端口 22
- 禁止使用protocol version 1
- 限制可登錄用戶 白名單
- 設定空閑會話超時時長
- 利用防火墻設置ssh訪問策略
- 僅監(jiān)聽特定的IP地址 公網(wǎng) 內(nèi)網(wǎng)
- 基于口令認證時,使用強密碼策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
- 使用基于密鑰的認證
- 禁止使用空密碼
- 禁止root用戶直接登錄
- 限制ssh的訪問頻度和并發(fā)在線數(shù)
- 經(jīng)常分析日志 分離
- 如果有一天登錄ssh變得非常非常慢,請禁用反向解析
三. 使用密鑰對免交互驗證登錄
原理:
- 用戶/密碼
- 基于秘鑰
用戶/密碼:
- 1.生成公鑰和私鑰
- 2.將公鑰導給對面
- 客戶端發(fā)起ssh請求,服務器會把自己的公鑰發(fā)送給用戶
- 用戶會根據(jù)服務器發(fā)來的公鑰對密碼進行加密
- 加密后的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功
基于密鑰的登錄方式 :
- 首先在客戶端生成一對密鑰(ssh-keygen)
- 并將客戶端的公鑰ssh-copy-id 拷貝到服務端
- 當客戶端再次發(fā)送一個連接請求,包括ip、用戶名
- 服務端得到客戶端的請求后,會到authorized_keys()中查找,如果有響應的IP和用戶,就會隨機生成一個字符串,例如:kgc
- 服務端將使用客戶端拷貝過來的公鑰進行加密,然后發(fā)送給客戶端
- 得到服務端發(fā)來的消息后,客戶端會使用私鑰進行解密,然后將解密后的字符串發(fā)送給服務端
- 服務端接受到客戶端發(fā)來的字符串后,跟之前的字符串進行對比,如果一致,就允許免密碼登錄
1.創(chuàng)建密鑰
2.將密鑰傳送給服務端
3.在服務端查看是否收到密鑰文件
如果有,會生成一個 authorized_keys 文件
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Linux deepin 刪除多余內(nèi)核的實現(xiàn)方法
這篇文章主要介紹了Linux deepin 刪除多余內(nèi)核的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12Ubuntu安裝MySQL5.7并配置數(shù)據(jù)存儲路徑的方法步驟
這篇文章主要介紹了Ubuntu安裝MySQL5.7并配置數(shù)據(jù)存儲路徑的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06Canonical通過Flutter啟用Linux桌面應用程序(推薦)
這篇文章主要介紹了Canonical通過Flutter啟用Linux桌面應用程序,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07詳解Centos8 配置靜態(tài)IP的實現(xiàn)
這篇文章主要介紹了詳解Centos8 配置靜態(tài)IP的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10