ssh服務詳解

傳統的網絡服務程序,如:ftp、pop和telnet在本質上都是不安全的,由於它們在網絡上用明文傳送口令和數據,別有用心的人很是容易就能夠截獲這些口令和數據。並且,這些服務程序的安全驗證方式也是有其弱點的,就是很容易受到「中間人」(man-in-the-middle)這種方式的***。所謂「中間人」的***方式,就是「中間人」冒充真正的服務器接收你的傳給服務器的數據,而後再冒充你把數據傳給真正的服務器。服務器和你之間的數據傳送被「中間人」一轉手作了手腳以後,就會出現很嚴重的問題。 web

1、什麼是ssh

SSH 爲 Secure Shell 的縮寫,由 IETF 的網絡小組(Network Working Group)所制定;SSH 爲創建在應用層基礎上的安全協議。SSH 是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。利用 SSH 協議能夠有效防止遠程管理過程當中的信息泄露問題。
SSH是標準的網絡協議,可用於大多數UNIX操做系統,可以實現字符界面的遠程登陸管理,它默認使用22號端口,採用密文的形式在網絡中傳輸數據,相對於經過明文傳輸的Telnet,具備更高的安全性。
SSH提供了口令和密鑰兩種用戶驗證方式,這二者都是經過密文傳輸數據的。
不一樣的是,口令用戶驗證方式傳輸的是用戶的帳戶名和密碼,這要求輸入的密碼具備足夠的複雜度才能具備更高的安全性。
而基於密鑰的安全驗證必須爲用戶本身建立一對密鑰,並把共有的密鑰放在須要訪問的服務器上。當須要鏈接到SSH服務器上時,客戶端軟件就會向服務器發出請求,請求使用客戶端的密鑰進行安全驗證。服務器收到請求以後,先在該用戶的根目錄下尋找共有密鑰,而後把它和發送過來的公有密鑰進行比較。若是兩個密鑰一致,服務器就用公有的密鑰加密「質詢」,並把它發送給客戶端軟件。客戶端收到質詢以後,就能夠用本地的私人密鑰解密再把它發送給服務器。這種方式是至關安全的。shell

2、ssh服務認證類型

1.基於口令認證數據庫

基於口令的安全驗證的方式就是你們如今一直在用的,只要知道服務器的SSH鏈接賬號和口令(固然也要知道對應服務器的 IP及開放的 SSH端口,默認爲22 ),就能夠經過 ssh客戶端登陸到這臺遠程主機。此時,聯機過程當中全部傳輸的數據都是加密的。
以下所示
ssh服務詳解
2.基於密鑰認證centos

首先在客戶端生成一對密鑰
ssh服務詳解
將客戶端的公鑰傳到服務器端
ssh服務詳解
測試
ssh服務詳解安全

3、配置ssh服務

爲了能讓咱們的服務器更加安全,咱們能夠更改配置文件來阻擋一些***的***。
首先咱們配置文件備份一遍,以避免出錯無法還原
[root@ca .ssh]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
修改配置文件
咱們經過看配置文件發現ssh服務的默認端口是22,不少時候咱們的服務器被***不是被人針對***了,而是對方在掃一個網段中開啓22端口的機器,你的機器密碼又是很簡單的111111之類的,你不被黑誰被黑,因此咱們要把默認端口改了,這樣就不容易被人掃出來惡意***了。
修改默認端口
ssh服務詳解
咱們把默認端口改成9527,(注意改的這個端口必定不能佔用別的服務的默認端口,以避免別的服務啓動不起來)效果以下
ssh服務詳解
xshell默認用22端口登陸,因此登陸不上,咱們換9527端口登陸。
ssh服務詳解
成功登陸
禁止root登陸
root在咱們系統中是一個特殊的存在,他是系統管理員,也就意味着他在系統中能夠隨心所欲,因此它也是咱們要特別關注的對象,咱們能夠再碰是的操做中用普通用戶操做,在有須要修改一些系統設置的時候再從普通用戶切換到root用戶,這樣能夠最大限度的避免由於誤操做而對系統形成破壞,同時也能夠避免***使用root用戶名來暴力破解密碼登陸系統
ssh服務詳解
咱們能夠看到系統默認的配置是容許root登陸的因此咱們把它改成no就能夠禁止root登陸了,咱們能夠看下效果
ssh服務詳解
若是你用root登陸不論你密碼是否輸入正確他都會提示拒絕了密碼,因此你可讓***盡情嘗試暴力破解他也登陸不上去。
限制ssh監聽的IP
這個適用於服務器有多個IP,這樣咱們就能夠只監聽內網IP,這樣就只能用在同一個局域網的機器去鏈接,而咱們只須要讓在同一個服務器的另外一臺機器監聽在外網,這樣就能夠實如今外網也訪問服務器了,方法以下
在sshd_config中修改監聽端口
ssh服務詳解
咱們來看下效果
ssh服務詳解
咱們的這臺機器是有兩個ip的咱們分別測試用這兩個ip鏈接
ssh服務詳解
能夠看到咱們只能經過192.168.92.133鏈接
禁止使用密碼登陸
在前面咱們說過使用key認證登陸的,這是一種比較安全的登陸方式,因此爲了提升安全性咱們能夠經過這種方式來登陸服務器,再禁止使用密碼登陸使用key認證登陸我已經說過了,在這裏就說下如何禁止使用密碼登陸,也只須要修改一下配置文件就能夠了,以下
ssh服務詳解
這個時候咱們是沒法用密碼登陸系統的
ssh服務詳解
而咱們須要傳公鑰就得要密碼這是很矛盾的,因此須要咱們提早把公鑰傳給服務器,或者臨時開啓密碼登陸,而後就能實現登陸了。服務器

4、ssh端口轉發

SSH 不光會自動加密和解密全部 SSH 客戶端與服務端之間的網絡數據。並且SSH 還有一個很是有用的功能,這就是端口轉發。它可以將其餘 TCP 端口的網絡數據經過 SSH 連接來轉發,而且自動提供了相應的加密及解密服務。這一過程有時也被叫作「隧道」(tunneling),這是由於 SSH 爲其餘 TCP 連接提供了一個安全的通道來進行傳輸而得名。
ssh端口轉發兩大功能
1.加密SSH Client 端至SSH Server端之間的通訊數據
2.爲了突破防火牆的限制完成一些以前沒法創建的TCP鏈接
ssh端口轉發又分爲本地轉發和遠程轉發
1.本地轉發
本地轉發主要運用於目標服務器由於防火牆規則沒法訪問,只能由處於同一個局域網內的機器訪問,這時候就須要咱們用本地端口轉發了
本地端口轉發格式以下:
ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
ssh服務詳解
外部主機A要訪問數據庫服務器C,可是由於防火牆規則沒法直接訪問,這時候咱們要先鏈接內部服務器B,經過B來鏈接C,也就是拿B作跳板
首先咱們要在外部主機上選擇一個端口做爲監聽端口,咱們使用telnet訪問,因此不能用管理員訪問,而非管理員用戶對1-1023端口是沒有權限的,因此咱們要選1024-65535之間未被佔用的端口。
在數據庫服務器上也要安裝telnet.server
咱們只須要在外部主機上操做就能夠了
首先咱們看可否直接鏈接數據庫服務器
ssh服務詳解
咱們作一個本地端口轉發
[root@web ~]# ssh -L 1080:centos6:23 -Nf centos7dns
centos6就是咱們要訪問的數據庫服務器
centos7dns就是咱們的轉發服務器
1080就是咱們選擇的本地端口
-f:後臺啓用
-N:不打開遠程shell,處於等待狀態
-g:啓用網關功能
這個時候咱們只需經過本地監聽的1080端口就能訪問數據庫服務器了
ssh服務詳解
2.遠程轉發
遠程轉發不一樣之處在於遠程轉發的監聽端口是在遠程主機上打開的,就像咱們要訪問數據庫服務器C,使用遠程端口轉發就是在內部服務器B上進行,使用遠程端口轉發要保證端口轉發服務器和目標服務器之間沒有被防火牆攔截。
SSH 的遠程端口轉發的格式以下所示
ssh -R sshserver_port:remote_host:remotehost_port sshserver
遠程端口的轉發應用於數據庫服務器和內部管理都不容許外網鏈接,這時候咱們就須要在內部管理服務器上作一個遠程端口轉發隧道,讓遠程主機能夠與數據庫服務器創建鏈接
[root@db ~]# ssh -R 1080:centos6 -Nf centos7
這樣遠程主機監聽本地端口,使用telnet協議就能夠遠程訪問數據庫服務器了。網絡

相關文章
相關標籤/搜索