SSH作為L(zhǎng)inux服務(wù)器的缺省登陸方式,,安全性上需要進(jìn)一步的增強(qiáng),,就我個(gè)人經(jīng)驗(yàn)來(lái)講,主要有以下方法:
1.禁止root用戶(hù)登陸:
修改/etc/ssh/sshd_config
PermitRootLogin yes
2.僅允許某一用戶(hù)(如Jack)登陸
修改/etc/ssh/sshd_config
UserAllow Jack
3.修改SSH監(jiān)聽(tīng)端口(如7890)
修改/etc/ssh/sshd_config
Port 7890
4.通過(guò)hosts.allow僅允許指定IP(如8.8.8.8)或IP段(如8.8.8.x)通過(guò)
修改/etc/hosts.deny
sshd:all
修改/etc/hosts.allow
sshd:8.8.8.8
sshd:8.8.8.
5.禁用密碼方式驗(yàn)證,,使用密鑰證書(shū)方式登陸
具體實(shí)現(xiàn)過(guò)程將稍后在本文中進(jìn)行講解
6.在服務(wù)器上安裝OpenVPN Server,,然后僅允許OpenVPN的本地IP段通過(guò)
這樣每次都需要通過(guò)證書(shū)登陸到OpenVPN,才能再登陸到SSH,具體OpenVPN的搭建請(qǐng)參考我的這篇文章:http:///archives/555.html
從1到6,,安全級(jí)別逐漸加強(qiáng),,但安全與便捷始終存在著矛盾,這一點(diǎn)需要大家自己進(jìn)行取舍,。
下面,,我將對(duì)利用SSH Key實(shí)現(xiàn)安全的密鑰證書(shū)方式登陸進(jìn)行介紹,介紹中包括的客戶(hù)端為 SSH Secure Shell,,PuTTY,,SecureCRT以及Linux終端。
一,、配置OpenSSH服務(wù)端
1.修改配置文件中的以下記錄
# vim /etc/ssh/sshd_config
================================
PermitEmptyPasswords no
PasswordAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
StrictModes no
================================
2.為用戶(hù)(如jack)創(chuàng)建authorized_keys文件
# cd /home/jack
# mkdir .ssh
# touch .ssh/authorized_keys
# chmod 700 .ssh
# chmod 600 .ssh/authorized_keys
# chown -R jack:jack .ssh(SUSE上需要執(zhí)行 chown -R jack:users .ssh)
3.重啟OpenSSH服務(wù)
# /etc/init.d/sshd restart
二,、配置SSH客戶(hù)端
使用SSH Secure Shell客戶(hù)端生成SSH Key
打開(kāi)SecureCRT客戶(hù)端,點(diǎn)擊 “ Edit- Settings ”,;
選擇 “ Global Settings - User Authentication – Keys ”,,點(diǎn)擊 “ Generate New ”;
再出現(xiàn)的界面中選擇 “ RSA ” 與 “ 1024 ”,,點(diǎn)擊 “ 下一步 ”,;
會(huì)出現(xiàn)一個(gè)密碼生成的界面,完成之后,,點(diǎn)擊下一步,;
在界面中輸入 文件名,提示信息與密碼短語(yǔ),,點(diǎn)擊下一步,;
可以看到剛剛生成的key;
進(jìn)入密鑰存放路徑中,,用記事本打開(kāi)Jack.pub公鑰文件,;
將文件中的密鑰信息復(fù)制到新的文件中,重新編輯為可被OpenSSH接受的格式,;
例如原有格式:
---- BEGIN SSH2 PUBLIC KEY ----Comment: "Jack [1024-bit rsa, Digby ]"
AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCN
qnCPOXnHqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe
9/8xDIwxww9OFvRPk9KP7W1653ahj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q==
---- END SSH2 PUBLIC KEY ----
可被OpenSSH接受的格式,即“ssh-rsa 密鑰 提示信息”,,需要去除換行,,將整個(gè)處理為單行記錄:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCNqnCPOXn
HqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe9/8xDIwxww9OFvRPk9KP7W1653a
hj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q== Jack
將編輯后的內(nèi)容復(fù)制下來(lái),并粘貼到服務(wù)器中需要通過(guò)密鑰登陸的用戶(hù)(如jack)的 ~/.ssh/authorized_keys 文件中,。
此時(shí)SSH Secure Shell默認(rèn)已經(jīng)使用Identity文件作為本地私鑰了,;
使用SSH Secure Shell工具進(jìn)行登陸,當(dāng)出現(xiàn)以下提示框,,說(shuō)明密鑰已經(jīng)驗(yàn)證通過(guò),,輸入設(shè)置的密碼短語(yǔ),即可登陸,。
使用Linux終端生成SSH Key
使用ssh-keygen生成SSH Key,依次輸入:回車(chē),,密碼短語(yǔ),,密碼短語(yǔ)。
然后進(jìn)入密鑰存放路徑中,,打開(kāi) id_rsa.pub 公鑰文件,;
將文件中的內(nèi)容復(fù)制下來(lái),粘貼到服務(wù)器中需要通過(guò)密鑰登陸的用戶(hù)(如jack)的 ~/.ssh/authorized_keys 文件中,。
使用命令行進(jìn)行登陸,,當(dāng)出現(xiàn)以下提示框,說(shuō)明密鑰已經(jīng)驗(yàn)證通過(guò),,輸入設(shè)置的密碼短語(yǔ),,即可登陸。
使用PuTTY客戶(hù)端生成SSH Key
打開(kāi)PUTTYGEN.exe程序,,點(diǎn)擊Generator,,在出現(xiàn)的界面中滑動(dòng)鼠標(biāo)來(lái)輸入隨機(jī)數(shù)據(jù),進(jìn)入到如下界面,。
執(zhí)行以下操作:
在Key comment:輸入key的提示信息,;
在Key passphrase:輸入key的密碼短語(yǔ),在Confirm passphrase:再次輸入key的密碼短語(yǔ),;
在Type of key to generate:選擇SSH-2 RSA,;
在Number of bits in a generated key:輸入1024;
點(diǎn)擊Save public key保存 公鑰 到本地,,命名為ssh-rsa.pub,;
點(diǎn)擊Save private key保存 私鑰 到本地,命名為ssh-rsa.ppk,。
將最上方的Public key for pasting into OpenSSH authorized_keys file:的文本框中的內(nèi)容復(fù)制下來(lái),,并粘貼到服務(wù)器中需要通過(guò)密鑰登陸的用戶(hù)(如jack)的 ~/.ssh/authorized_keys 文件中。
使用PuTTY,,在Connection-SSH-Auth中的Private key file for authentication中選擇剛生成的ssh-rsa.ppk文件,。
使用PuTTY進(jìn)行登陸,當(dāng)出現(xiàn)以下提示框,,則說(shuō)明密鑰已經(jīng)驗(yàn)證通過(guò),,輸入開(kāi)始設(shè)置的密碼短語(yǔ),即可登陸,。
使用SecureCRT客戶(hù)端生成SSH Key
打開(kāi)SecureCRT客戶(hù)端,,點(diǎn)擊 “ Tools - Create Public key ”;
在陸續(xù)出現(xiàn)的界面中,,執(zhí)行以下操作:
選擇 下一步,,然后選擇密鑰類(lèi)型為“ RSA ”;
輸入密碼短語(yǔ)與提示信息;
輸入密鑰長(zhǎng)度(位):1024,;
選擇 “ OpenSSH Key format ” 并確認(rèn)密鑰存放路徑,,點(diǎn)擊 完成;
進(jìn)入密鑰存放路徑中,,用記事本打開(kāi)Identity.pub公鑰文件,;
將文件中的內(nèi)容復(fù)制下來(lái),粘貼到服務(wù)器中需要通過(guò)密鑰登陸的用戶(hù)(如jack)的 ~/.ssh/authorized_keys 文件中,。
如果使用的SecureCRT客戶(hù)端版本比較低,,不能夠選擇“OpenSSH Key format”格式來(lái)存儲(chǔ)密鑰,那么就需要將文件中的密鑰信息復(fù)制到新的文件中,,重新編輯為可被OpenSSH接受的格式,;
例如原有格式:
---- BEGIN SSH2 PUBLIC KEY ----
Subject: Digby
Comment: "Jack"
ModBitSize: 1024
AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCN
qnCPOXnHqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe
9/8xDIwxww9OFvRPk9KP7W1653ahj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q==
---- END SSH2 PUBLIC KEY ----
可被OpenSSH接受的格式,即“ssh-rsa 密鑰 提示信息”,,需要去除換行,,將整個(gè)處理為單行記錄:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCNqnCPOXn
HqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe9/8xDIwxww9OFvRPk9KP7W1653a
hj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q== Jack
將編輯后的內(nèi)容復(fù)制下來(lái),粘貼到服務(wù)器中需要通過(guò)密鑰登陸的用戶(hù)(如jack)的 ~/.ssh/authorized_keys 文件中,。
此時(shí)SecureCRT默認(rèn)已經(jīng)使用Identity文件作為本地私鑰了,,如果需要指定私鑰文件,需要在 “Connection - SSH2 - Authentication(PublicKey) - Properties ”中進(jìn)行設(shè)置,;
使用SecureCRT工具進(jìn)行登陸,,當(dāng)出現(xiàn)以下提示框,則說(shuō)明密鑰已經(jīng)驗(yàn)證通過(guò),,輸入開(kāi)始設(shè)置的密碼短語(yǔ),,即可登陸。
三,、注意事項(xiàng)
在生成了key之后,,一定要保存好生成的兩個(gè)證書(shū)文件,它們分別代表了 公鑰 和 私鑰,;
其中公鑰用于添加到服務(wù)器端用來(lái)識(shí)別私鑰,,私鑰用于服務(wù)器認(rèn)證,如果不單獨(dú)復(fù)制出來(lái)好好的保存的話(huà),,極有可能在重裝系統(tǒng)或SSH客戶(hù)端之后,,造成兩個(gè)證書(shū)文件的丟失,也就再也無(wú)法登陸服務(wù)器了,。
另外,,為證書(shū)創(chuàng)建一個(gè)密碼短語(yǔ)也是非常有必要的,,因?yàn)槿绻坏┳C書(shū)泄露了,,且沒(méi)有密碼短語(yǔ)的保護(hù),那么拿到證書(shū)的人就可以直接登陸到服務(wù)器中。