張倩莉 喬治錫
摘 要: SSH是目前較為可靠,專門(mén)為遠(yuǎn)程登錄會(huì)話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議,利用SSH安全外殼協(xié)議可以有效防止遠(yuǎn)程管理過(guò)程中的信息泄露問(wèn)題。通過(guò)對(duì)SSH遠(yuǎn)程登錄技術(shù)的研究和實(shí)驗(yàn),提出一種更安全可靠的服務(wù)器遠(yuǎn)程登錄策略,為用戶選用安全的遠(yuǎn)程登錄方式提供參考依據(jù)。
關(guān)鍵詞: SSH協(xié)議; 口令; 密鑰; 遠(yuǎn)程登錄
中圖分類(lèi)號(hào):TP393.07 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2016)08-23-02
Abstract: SSH is currently a more reliable protocol, which provides security for the remote login session and other network services, the use of SSH security shell protocol can effectively prevent the information leakage in the remote management process. Through the research and experiment on the SSH remote login technology, a more secure and reliable server remote access policy is put forward, which provides a reference basis for the user to choose the safe remote login mode.
Key words: SSH protocol; password; key; remote login
0 引言
SSH是目前較為可靠,專門(mén)為遠(yuǎn)程登錄會(huì)話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議,利用SSH安全外殼協(xié)議可以有效防止遠(yuǎn)程管理過(guò)程中的信息泄露問(wèn)題。網(wǎng)絡(luò)早期,互聯(lián)網(wǎng)都是明文通信,信息一旦被截獲,內(nèi)容就暴露無(wú)疑。1995年,芬蘭學(xué)者Tatu Ylonen設(shè)計(jì)了SSH協(xié)議,將登錄信息全部加密,成為互聯(lián)網(wǎng)安全的一個(gè)基本解決方案。
1 基于口令的安全認(rèn)證
用戶輸入賬號(hào)和口令就可以登錄到遠(yuǎn)程主機(jī),所有傳輸?shù)臄?shù)據(jù)都會(huì)被加密。SSH遠(yuǎn)程登錄的流程如下:
⑴ 雙方協(xié)商SSH協(xié)議版本;
⑵ 遠(yuǎn)程主機(jī)收到用戶的登錄請(qǐng)求,生成公鑰并將其發(fā)送給客戶端;
⑶ 客戶端使用該公鑰,將登錄密碼加密后,發(fā)送給遠(yuǎn)程主機(jī);
⑷ 遠(yuǎn)程主機(jī)用私鑰解密登錄密碼,如果密碼正確,就同意用戶登錄。
1.1 中間人攻擊
上述過(guò)程本身是安全的,但是實(shí)施的時(shí)候也會(huì)存在風(fēng)險(xiǎn)。如果有人截獲了登錄請(qǐng)求,然后冒充遠(yuǎn)程主機(jī),將偽造的公鑰發(fā)給客戶端,那么客戶端很難辨別真?zhèn)?。比如在公共的wifi區(qū)域,攻擊者冒充服務(wù)器用偽造的公鑰發(fā)送給客戶端,客戶端就會(huì)將密碼加密后發(fā)送給冒充的服務(wù)器,冒充的服務(wù)器便可以拿自己的私鑰獲取用戶的登錄密碼了,然后再用這個(gè)密碼登錄遠(yuǎn)程主機(jī),那么SSH的安全機(jī)制就蕩然無(wú)存了。這種風(fēng)險(xiǎn)就是著名的“中間人攻擊”(Man-in-the-middle attack)。
1.2 口令登錄
為了避免上述風(fēng)險(xiǎn),SSH在第一次登錄遠(yuǎn)程主機(jī)的時(shí)候,會(huì)提示用戶當(dāng)前主機(jī)的“公鑰指紋”,詢問(wèn)用戶是否繼續(xù),選擇繼續(xù)后就可以輸入密碼進(jìn)行登錄,當(dāng)遠(yuǎn)程的主機(jī)接受用戶登錄后,該臺(tái)服務(wù)器的公鑰就會(huì)保存到客戶端的~/.ssh/known_hosts文件中。系統(tǒng)命令如下:
[root@ desktop15~]# ssh server15
The authenticity of host ' server15 (172.25.15.10)'
can't be established.
ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:
37:0c:78:2d:bc:b0:08.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ' server15,172.25.15.10'
(ECDSA) to the list of known hosts.
root@ server15's password:
Last login:Wed Jul 29 15:56:01 2015 from 172.25.15.2
ssh防止中間人攻擊的測(cè)試如下:
[root@ desktop15 ~]# vim /etc/hosts #修改server15的IP地址
[root@ desktop15 ~]# ssh server15
@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING:POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@
……
Host key verification failed.
遠(yuǎn)程登錄并沒(méi)有成功,原因是ssh連接的desktop15主機(jī)的IP地址與第一次連接成功生成的文件~/.ssh/known_hosts中存放的IP地址不一致。
2 基于密鑰的安全認(rèn)證
所謂“公鑰登錄”,就是用戶將自己的公鑰儲(chǔ)存在遠(yuǎn)程主機(jī)上。登錄的時(shí)候,遠(yuǎn)程主機(jī)會(huì)向用戶發(fā)送一段隨機(jī)字符串,用戶用自己的私鑰加密后,再發(fā)送回遠(yuǎn)程主機(jī)。遠(yuǎn)程主機(jī)用事先儲(chǔ)存的公鑰進(jìn)行解密,如果成功,就證明用戶是可信的,直接允許其登錄shell,不再要求密碼。因此,要實(shí)現(xiàn)密鑰登錄,必須先生成一對(duì)密鑰,并把公用密匙放在需要訪問(wèn)的服務(wù)器上。
2.1 生成密鑰
Linux中生成密鑰的命令是ssh-keygen,操作如下:
[root@desktop15 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
#此處如果輸入密碼,將對(duì)私鑰設(shè)置口令
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
……
執(zhí)行完成,~/.ssh/目錄下會(huì)創(chuàng)建id_rsa、id_rsa.pub兩個(gè)文件,這兩文件就是生成的私鑰和公鑰。
2.2 傳送密鑰
將生成的密鑰傳送到遠(yuǎn)程主機(jī)上,操作如下:
[root@desktop15 ~]# ssh-copy-id c1@server15
……
c1@server15's password: #第一次登錄需要輸入密碼
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'c1@server15'"
and check to make sure that only the key(s) you
wanted were added.
當(dāng)再用c1用戶登錄遠(yuǎn)程主機(jī)時(shí),就不需要輸入密碼了。這里不用root用戶登錄也是考慮到安全性,更好的辦法是用普通用戶進(jìn)入系統(tǒng)后,在切換到root用戶管理服務(wù)器,root用戶的密碼不用在網(wǎng)絡(luò)上傳輸。
3 SSH安全登錄遠(yuǎn)程主機(jī)策略
3.1 服務(wù)器安全設(shè)置
通過(guò)上述的登錄方式,可以指定服務(wù)器只能由某一臺(tái)主機(jī)的某個(gè)用戶登錄,并且禁止root用戶賬號(hào)遠(yuǎn)程登錄。這樣,可以將指定的某臺(tái)主機(jī)作為“跳板”主機(jī),通過(guò)密鑰的方式登錄到服務(wù)器上,而其他主機(jī)則不能通過(guò)ssh遠(yuǎn)程連接到服務(wù)器上了。服務(wù)器端的操作如下:
[root@server15 ~]# vim /etc/ssh/sshd_config
將如下兩個(gè)參數(shù)設(shè)置為no:
PermitRootLogin no #禁止root用戶ssh遠(yuǎn)程登錄
PasswordAuthentication no #禁止用戶輸入密碼
(禁止用戶用口令登錄)
[root@server15 ~]# systemctl restart sshd
3.2 驗(yàn)證
[root@desktop15 ~]# ssh root@server15
Permission denied(publickey,gssapi-keyex,gssapi-with-mic).
[root@desktop15 ~]# ssh student@server15
Permission denied(publickey,gssapi-keyex,gssapi-with-mic).
[root@desktop15 ~]# ssh -X c1@server15
Last login: Wed Jul 29 15:43:36 2015 from
desktop15.example.com
[c1@server15 ~]$ su root
Password:
[root@server15 c1]#
通過(guò)上述操作可以看出,root用戶和其他普通用戶都不能遠(yuǎn)程登錄服務(wù)器了,只有c1用戶能夠登錄進(jìn)來(lái),然后通過(guò)su命令將用戶切換為root,管理服務(wù)器系統(tǒng)。
4 結(jié)束語(yǔ)
本文探討了一種更安全的ssh遠(yuǎn)程登錄服務(wù)器的方式,設(shè)定只能某臺(tái)主機(jī)的某個(gè)用戶能夠遠(yuǎn)程登錄到服務(wù)器。通常,可以將這臺(tái)主機(jī)作為“跳板”主機(jī),通過(guò)它和指定的用戶來(lái)遠(yuǎn)程登錄服務(wù)器。
參考文獻(xiàn)(References):
[1] 張國(guó)防.基于SSH協(xié)議的Linux遠(yuǎn)程管理[J].計(jì)算機(jī)安全,2014.12:37-39
[2] 李珠峰.對(duì)SSH證書(shū)應(yīng)用模式下的中間人攻擊[J].計(jì)算機(jī)應(yīng)用與軟件,2013.11:313-315
[3] 曹江華.Red Hat Enterprise Linux 7.0系統(tǒng)管理[M].電子工業(yè)出版社,2015.
[4] 胡雯,李燕.基于Linux系統(tǒng)的遠(yuǎn)程控制技術(shù)研究[J].軟件導(dǎo)刊,2013.12:152-154
[5] 陳明.基于OpenSSH實(shí)現(xiàn)安全傳輸?shù)慕鉀Q方案[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2014.22:173-174