SSH(Secure Shell 的縮寫)是一種網(wǎng)絡(luò)協(xié)議,用于加密兩臺(tái)計(jì)算機(jī)之間的通信,并且支持各種身份驗(yàn)證機(jī)制。
實(shí)務(wù)中,它主要用于保證遠(yuǎn)程登錄和遠(yuǎn)程通信的安全,任何網(wǎng)絡(luò)服務(wù)都可以用這個(gè)協(xié)議來(lái)加密。
歷史上,網(wǎng)絡(luò)主機(jī)之間的通信是不加密的,屬于明文通信。這使得通信很不安全,一個(gè)典型的例子就是服務(wù)器登錄。登錄遠(yuǎn)程服務(wù)器的時(shí)候,需要將用戶輸入的密碼傳給服務(wù)器,如果這個(gè)過(guò)程是明文通信,就意味著傳遞過(guò)程中,線路經(jīng)過(guò)的中間計(jì)算機(jī)都能看到密碼,這是很可怕的。
SSH 就是為了解決這個(gè)問(wèn)題而誕生的,它能夠加密計(jì)算機(jī)之間的通信,保證不被竊聽(tīng)或篡改。它還能對(duì)操作者進(jìn)行認(rèn)證(authentication)和授權(quán)(authorization)。明文的網(wǎng)絡(luò)協(xié)議可以套用在它里面,從而實(shí)現(xiàn)加密。
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è)工具公開(kāi)了,允許其他人免費(fèi)使用。
SSH 可以替換 rlogin、TELNET、FTP 和 rsh 這些不安全的協(xié)議,所以大受歡迎,用戶快速增長(zhǎng),1995年底已經(jīng)發(fā)展到五十個(gè)國(guó)家的20,000個(gè)用戶。SSH 1 協(xié)議也變成 IETF 的標(biāo)準(zhǔn)文檔。
1995年12月,由于客服需求越來(lái)越大,Tatu Yl?nen 就成立了一家公司 SCS,專門銷售和開(kāi)發(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 的有些功能也沒(méi)有提供。
1999年,OpenBSD 的開(kāi)發(fā)人員決定寫一個(gè) SSH 2 協(xié)議的開(kāi)源實(shí)現(xiàn),這就是 OpenSSH 項(xiàng)目。該項(xiàng)目最初是基于 SSH 1.2.12 版本,那是當(dāng)時(shí) SSH1 最后一個(gè)開(kāi)源版本。但是,OpenSSH 很快就完全擺脫了原始的官方代碼,在許多開(kāi)發(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)的。本書的內(nèi)容主要是針對(duì) OpenSSH。
SSH 的軟件架構(gòu)是服務(wù)器-客戶端模式(Server - Client)。在這個(gè)架構(gòu)中,SSH 軟件分成兩個(gè)部分:向服務(wù)器發(fā)出請(qǐng)求的部分,稱為客戶端(client),OpenSSH 的實(shí)現(xiàn)為 ssh;接收客戶端發(fā)出的請(qǐng)求的部分,稱為服務(wù)器(server),OpenSSH 的實(shí)現(xiàn)為 sshd。
本教程約定,大寫的 SSH 表示協(xié)議,小寫的 ssh 表示客戶端軟件。
另外,OpenSSH 還提供一些輔助工具軟件(比如 ssh-keygen 、ssh-agent)和專門的客戶端工具(比如 scp 和 sftp),這個(gè)教程也會(huì)予以介紹。