有那些專門做外貿(mào)的網(wǎng)站呀seo的優(yōu)化方案
什么是SSH
1.SSH
SSH(Secure Shell) 是較可靠,專為遠(yuǎn)程登錄會話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議,利用 SSH 協(xié)議可以有效防止遠(yuǎn)程管理過程中的信息泄露問題。
實(shí)際應(yīng)用中,主要用于保證遠(yuǎn)程登錄和遠(yuǎn)程通信的安全,任何網(wǎng)絡(luò)服務(wù)都可以用這個(gè)協(xié)議來加密。
2.歷史
1995年,芬蘭赫爾辛基工業(yè)大學(xué)的研究員 Tatu Yl?nen 設(shè)計(jì)了 SSH 協(xié)議的第一個(gè)版本(現(xiàn)稱為 SSH 1),同時(shí)寫出了第一個(gè)實(shí)現(xiàn)(稱為 SSH1)。
當(dāng)時(shí),他所在的大學(xué)網(wǎng)絡(luò)一直發(fā)生密碼嗅探攻擊,他不得不為服務(wù)器設(shè)計(jì)一個(gè)更安全的登錄方式。寫完以后,他就把這個(gè)工具公開了,允許其他人免費(fèi)使用。
SSH 可以替換 rlogin、TELNET、FTP 和 rsh 這些不安全的協(xié)議,所以大受歡迎,用戶快速增長,1995年底已經(jīng)發(fā)展到五十個(gè)國家的20,000個(gè)用戶。SSH 1 協(xié)議也變成 IETF 的標(biāo)準(zhǔn)文檔。
1995年12月,由于客服需求越來越大,Tatu Yl?nen 就成立了一家公司 SCS,專門銷售和開發(fā) SSH。這個(gè)軟件的后續(xù)版本,逐漸從免費(fèi)軟件變成了專有的商業(yè)軟件。
SSH 1 協(xié)議存在一些安全漏洞,所以1996年又提出了 SSH 2 協(xié)議(或者稱為 SSH 2.0)。這個(gè)協(xié)議與1.0版不兼容,在1997年進(jìn)行了標(biāo)準(zhǔn)化,1998年推出了軟件實(shí)現(xiàn) SSH2。但是,官方的 SSH2 軟件是一個(gè)專有軟件,不能免費(fèi)使用,而且 SSH1 的有些功能也沒有提供。
1999年,OpenBSD 的開發(fā)人員決定寫一個(gè) SSH 2 協(xié)議的開源實(shí)現(xiàn),這就是 OpenSSH 項(xiàng)目。該項(xiàng)目最初是基于 SSH 1.2.12 版本,那是當(dāng)時(shí) SSH1 最后一個(gè)開源版本。但是,OpenSSH 很快就完全擺脫了原始的官方代碼,在許多開發(fā)者的參與下,按照自己的路線發(fā)展。OpenSSH 隨 OpenBSD 2.6 版本一起提供,以后又移植到其他操作系統(tǒng),成為最流行的 SSH 實(shí)現(xiàn)。目前,Linux 的所有發(fā)行版幾乎都自帶 OpenSSH。
現(xiàn)在,SSH-2 有多種實(shí)現(xiàn),既有免費(fèi)的,也有收費(fèi)的。
3.架構(gòu)
SSH 的軟件架構(gòu)是服務(wù)器-客戶端模式(Server - Client)。在這個(gè)架構(gòu)中,SSH 軟件分成兩個(gè)部分:向服務(wù)器發(fā)出請求的部分,稱為客戶端(client),OpenSSH 的實(shí)現(xiàn)為 ssh;接收客戶端發(fā)出的請求的部分,稱為服務(wù)器(server),OpenSSH 的實(shí)現(xiàn)為 sshd。另外,OpenSSH 還提供一些輔助工具軟件(比如 ssh-keygen 、ssh-agent)和專門的客戶端工具(比如 scp 和 sftp)。
4.工作原理
-
連接建立
SSH依賴端口進(jìn)行通信。在未建立SSH連接時(shí),SSH服務(wù)器會在指定端口偵聽連接請求,SSH客戶端向SSH服務(wù)器該指定端口發(fā)起連接請求后,雙方建立一個(gè)TCP連接,后續(xù)會通過該端口通信。
默認(rèn)情況下,SSH服務(wù)器使用端口號22。當(dāng)SSH應(yīng)用于NETCONF時(shí),可以指定默認(rèn)端口號是22或者830。SSH使用的端口號可以被更改為設(shè)備其他可用端口,更改后當(dāng)前所有的連接都會斷開,SSH服務(wù)器開始偵聽新的端口。由于SSH默認(rèn)端口號22為知名端口,在進(jìn)行關(guān)鍵安全傳輸時(shí),建議修改SSH端口號。 -
版本協(xié)商
SSH協(xié)議目前存在SSH1.X(SSH2.0之前的版本)和SSH2.0版本。SSH2.0協(xié)議相比SSH1.X協(xié)議來說,在結(jié)構(gòu)上做了擴(kuò)展,可以支持更多的認(rèn)證方法和密鑰交換方法,同時(shí)提高了服務(wù)能力。SSH服務(wù)器和客戶端通過協(xié)商確定最終使用的SSH版本號,過程如下:-
- SSH服務(wù)器通過建立好的連接向SSH客戶端發(fā)送支持的SSH版本信息。
-
- SSH客戶端收到版本信息后,根據(jù)自身支持的SSH版本決定使用的版本號,并將決定使用的版本號發(fā)送給SSH服務(wù)器。
-
- SSH服務(wù)器判斷自己是否支持客戶端決定使用的版本號,從而確定版本協(xié)商是否成功。
-
-
算法協(xié)商
SSH工作過程中需要使用多種類型的算法,包括用于產(chǎn)生會話密鑰的密鑰交換算法、用于數(shù)據(jù)信息加密的對稱加密算法、用于進(jìn)行數(shù)字簽名和認(rèn)證的公鑰算法和用于數(shù)據(jù)完整性保護(hù)的HMAC算法。SSH服務(wù)器和客戶端對每種類型中具體算法的支持情況不同,因此雙方需要協(xié)商確定每種類型中最終使用的算法,過程如下:-
- SSH服務(wù)器和客戶端分別向?qū)Ψ桨l(fā)送自己支持的算法。
-
- SSH服務(wù)器和客戶端依次協(xié)商每種類型中具體使用的算法。在每類算法的協(xié)商過程中,SSH服務(wù)器和客戶端都會匹配出雙方均支持的算法作為最終使用的算法。每類算法均匹配成功后,算法協(xié)商完成。如果某類算法全部匹配失敗,則該類型的算法協(xié)商失敗,這會導(dǎo)致SSH服務(wù)器和客戶端之間算法協(xié)商失敗并斷開連接。
-
-
密鑰交換
SSH服務(wù)器和客戶端通過密鑰交換算法,動態(tài)生成共享的會話密鑰和會話ID,建立加密通道。會話密鑰主要用于后續(xù)數(shù)據(jù)傳輸?shù)募用?#xff0c;會話ID用于在認(rèn)證過程中標(biāo)識該SSH連接。
由于SSH服務(wù)器和客戶端需要持有相同的會話密鑰用于后續(xù)的對稱加密,為保證密鑰交換的安全性,SSH使用一種安全的方式生成會話密鑰,由SSH服務(wù)器和客戶端共同生成會話密鑰,利用數(shù)學(xué)理論巧妙地實(shí)現(xiàn)不直接傳遞密鑰的密鑰交換,無需通過不安全通道傳送該密鑰,具體過程如下圖所示。
- 1. SSH服務(wù)器生成素?cái)?shù)G、P、服務(wù)器私鑰b,并計(jì)算得到服務(wù)器公鑰y=(G^b)%P。- 2. SSH服務(wù)器將素?cái)?shù)G、P、服務(wù)器公鑰y發(fā)送給SSH客戶端。- 3. SSH客戶端生成客戶端私鑰a,計(jì)算得到客戶端公鑰x=(G^a)%P。- 4. SSH客戶端將客戶端公鑰x發(fā)送給SSH服務(wù)器。- 5. SSH服務(wù)器計(jì)算得到對稱密鑰K=(x^b)%P,SSH客戶端計(jì)算得到對稱密鑰K=(y^a)%P,數(shù)學(xué)定律可以保證SSH服務(wù)器和SSH客戶端生成的對稱密鑰相同。
-
用戶認(rèn)證
SSH客戶端向SSH服務(wù)器發(fā)起認(rèn)證請求,SSH服務(wù)器對SSH客戶端進(jìn)行認(rèn)證。SSH支持以下幾種認(rèn)證方式:- 密碼(password)認(rèn)證:客戶端通過用戶名和密碼的方式進(jìn)行認(rèn)證,將加密后的用戶名和密碼發(fā)送給服務(wù)器,服務(wù)器解密后與本地保存的用戶名和密碼進(jìn)行對比,并向客戶端返回認(rèn)證成功或失敗的消息。
- 密鑰(publickey)認(rèn)證:客戶端通過用戶名,公鑰以及公鑰算法等信息來與服務(wù)器進(jìn)行認(rèn)證。
- password-publickey認(rèn)證:指用戶需要同時(shí)滿足密碼認(rèn)證和密鑰認(rèn)證才能登錄。
- all認(rèn)證:只要滿足密碼認(rèn)證和密鑰認(rèn)證其中一種即可。
SSH用戶認(rèn)證最基本的兩種方式是密碼認(rèn)證和密鑰認(rèn)證。密碼認(rèn)證方式比較簡單,且每次登錄都需要輸入用戶名和密碼。而密鑰認(rèn)證可以實(shí)現(xiàn)安全性更高的免密登錄,是一種廣泛使用且推薦的登錄方式。
-
密碼認(rèn)證
密碼認(rèn)證的基本原理是SSH客戶端使用服務(wù)器公鑰對密碼進(jìn)行加密,SSH服務(wù)器使用服務(wù)器私鑰解密后驗(yàn)證密碼的合法性,具體過程如下圖所示。
SSH密碼認(rèn)證登錄流程
- 1. SSH客戶端向SSH服務(wù)器發(fā)送登錄請求。
- 2. SSH服務(wù)器將服務(wù)器公鑰發(fā)送給SSH客戶端。
- 3. SSH客戶端輸入密碼,使用服務(wù)器公鑰加密密碼后發(fā)送給SSH服務(wù)器。
- 4. SSH服務(wù)器收到密文,使用服務(wù)器私鑰解密得到密碼。驗(yàn)證密碼是否正確,如果正確則認(rèn)證通過。
但是,這種認(rèn)證方式存在中間人攻擊的風(fēng)險(xiǎn),如果有人截獲了SSH客戶端的登錄請求后,冒充SSH服務(wù)器將偽造的公鑰發(fā)送給SSH客戶端,就可以獲取到用戶的登錄密碼。所以,在首次登錄SSH服務(wù)器時(shí),SSH客戶端上會提示公鑰指紋,并詢問用戶是否確認(rèn)登錄。用戶確認(rèn)后公鑰將被保存并信任,下次訪問時(shí),SSH客戶端將會核對SSH服務(wù)器發(fā)來的公鑰和本地保存的是否相同。這種方式適用于公布了公鑰指紋的SSH服務(wù)器以及已登錄過正確SSH服務(wù)器的SSH客戶端。 -
密鑰認(rèn)證
為避免中間人攻擊,可以使用安全性更高的密鑰認(rèn)證。密鑰認(rèn)證的基本原理是SSH服務(wù)器使用客戶端的公鑰對隨機(jī)內(nèi)容加密,SSH客戶端使用自己的私鑰解密并發(fā)送給服務(wù)器以證實(shí)自己的身份,具體的過程如下圖所示。
SSH密鑰認(rèn)證登錄流程-
- 在進(jìn)行SSH連接之前,SSH客戶端需要先生成自己的公鑰私鑰對,并將自己的公鑰存放在SSH服務(wù)器上。
-
- SSH客戶端向SSH服務(wù)器發(fā)送登錄請求。
-
- SSH服務(wù)器根據(jù)請求中的用戶名等信息在本地搜索客戶端的公鑰,并用這個(gè)公鑰加密一個(gè)隨機(jī)數(shù)發(fā)送給客戶端。
-
- SSH客戶端使用自己的私鑰對返回信息進(jìn)行解密,并發(fā)送給SSH服務(wù)器。
-
- SSH服務(wù)器驗(yàn)證SSH客戶端解密的信息是否正確,如果正確則認(rèn)證通過。
-
-
會話請求
認(rèn)證通過后,SSH客戶端向服務(wù)器發(fā)送會話請求,請求服務(wù)器提供某種類型的服務(wù),即請求與服務(wù)器建立相應(yīng)的會話。服務(wù)器根據(jù)客戶端請求進(jìn)行回應(yīng)。 -
會話交互
會話建立后,SSH服務(wù)器端和客戶端在該會話上進(jìn)行數(shù)據(jù)信息的交互,雙方發(fā)送的數(shù)據(jù)均使用會話密鑰進(jìn)行加解密。
SSH 交互
1.服務(wù)器
首先安裝SSH服務(wù)器:
這個(gè)時(shí)候還不能直接啟動,直接啟動會提示配置錯(cuò)誤,因?yàn)楣€還沒生成:
上面第一條 sshd 命令失敗提示“sshd re-exec requires execution with an absolute path”,是為了防止有人出于各種目的,放置同名軟件在$PATH變量指向的目錄中,代替真正的 sshd,此時(shí)需要使用絕對路徑來啟動。也就是下一條的 /usr/sbin/sshd
此時(shí)啟動仍然失敗因?yàn)檫€沒有公鑰文件,執(zhí)行命令:
ssh-keygen -A
然后對比ssh配置文件夾可以看到生成了密鑰文件:
圖上左側(cè)執(zhí)行命令的窗口,右側(cè)是查看配置文件夾的窗口,右側(cè)上是執(zhí)行前的配置文件,下是執(zhí)行后的配置文件,可以看到生成了 ssh_host_dsa_key 與 ssh_host_dsa_key.pub 這兩個(gè)文件,其他的一些文件是:
- /sshd_config:配置文件
- /ssh_host_ecdsa_key:ECDSA 私鑰。
- /ssh_host_ecdsa_key.pub:ECDSA 公鑰。
- /ssh_host_key:用于 SSH 1 協(xié)議版本的 RSA 私鑰。
- /ssh_host_key.pub:用于 SSH 1 協(xié)議版本的 RSA 公鑰。
- /ssh_host_rsa_key:用于 SSH 2 協(xié)議版本的 RSA 私鑰。
- /ssh_host_rsa_key.pub:用于 SSH 2 協(xié)議版本的 RSA 公鑰。
- /etc/pam.d/sshd:PAM 配置文件。(在ssh文件夾的上一層)
sshd_config.d 是一個(gè)目錄,用于存放 SSH 服務(wù)器(sshd)的配置文件。這些配置文件通常以 .conf 結(jié)尾,并使用不同的前綴命名,如 sshd_config、sshd_default_config 等。這些配置文件允許管理員對 SSH 服務(wù)器進(jìn)行詳細(xì)的設(shè)置,例如端口號、認(rèn)證方式、日志記錄等。
然后進(jìn)入ssh_config 文件編輯參數(shù),可以設(shè)置的參數(shù)如下:
參數(shù) | 默認(rèn)值 | 參數(shù)說明 |
---|---|---|
Port | 22 | sshd服務(wù)默認(rèn)的端口22,為了安全考慮建議修改成其它端口;配置文件可以使用多個(gè)Port命令,同時(shí)監(jiān)聽多個(gè)端口 |
AddressFamily | any | 設(shè)置協(xié)議簇,默認(rèn)支持IPV4和IPV6 |
ListenAddress | 0.0.0.0 | 默認(rèn)監(jiān)聽網(wǎng)卡所有的IP地址 |
PermitRootLogin | yes | 是否允許root登陸,默認(rèn)是允許的,建議設(shè)置成no |
StrictModes | yes | 當(dāng)使用者的host key改變之后,server就不接受其聯(lián)機(jī) |
MaxAuthTries | 6 | 最多root嘗試6次連接 |
MaxSessions | 10 | 最大允許保持多少個(gè)未認(rèn)證的連接。默認(rèn)值是 10 到達(dá)限制后,將不再接受新連接,除非先前的連接認(rèn)證成功或超出 LoginGraceTime 的限制。 |
PrintMotd | yes | 登陸后是否顯示一些默認(rèn)信息 |
PrintLastLog | yes | 顯示上次登錄的信息 |
TCPKeepAlive | yes | ssh server會傳keepalive信息給client以此確保兩者的聯(lián)機(jī)正常,任何一端死后,馬上斷開 |
PasswordAuthentication | yes | 是否允許使用基于密碼的認(rèn)證。默認(rèn)為”yes”。 |
PermitEmptyPasswords | no | 是否允許密碼為空的用戶遠(yuǎn)程登錄。默認(rèn)為”no”。 |
還有很多參數(shù)就不全列出來了,有興趣可以自己查詢; https://man.openbsd.org/sshd_config
此時(shí)配置就完成了,再次使用 /usr/sbin/sshd 啟動服務(wù),然后查看一下服務(wù)是否存在:
2.客戶端
我用的是win10系統(tǒng),win10默認(rèn)自帶SSH客戶端,因此不需要安裝
打開shell,使用 ssh user@ip 連接:
看到圖上我先是使用默認(rèn)端口連接失敗,然后指定端口在連接,會先問你是否確定XXX,輸入yes就行,然后輸入要登錄的賬號密碼,就連接成功了;
3.VSCODE
實(shí)際開發(fā)一般都是辦公提供一臺windows機(jī)器,然后遠(yuǎn)程連到開發(fā)機(jī)器上編碼,以VSCODE為例:
安裝VSCODE ,然后安裝 remote-SSH 插件;
在左下角選擇“打開遠(yuǎn)程窗口”,然后新建ssh連接,然后輸入剛剛的ssh指令,
然后后面還需要選連接機(jī)器平臺(linux/windows/XXX)以及輸入密碼, 這些都輸入后最后連接成功效果如:
左下角連接按鈕顯示了連接的IP, 打開終端后也是連接的機(jī)器了。