近來發覺自己租的雲服務器頻繁受到ssh惡意登錄攻擊,短短几天四萬多次,於是,爲了安全起見,決定禁用密碼登錄,改用基於密鑰的登錄方式,順帶記錄一下過程。
注意:如果禁用了密碼登錄,使用密鑰方式登錄雲端的服務器,那麼不要啓動SELinux,除非你瞭解SELinux對SSHD的限制並且做了相應的配置,否則就再也登不進去了,親身體驗,非常刺激。
本人使用的windows下SSH客戶端爲HyperTerminal,非常好用,強烈推薦,這玩意兒也支持串口通信和telnet。
過程記錄如下
1. 在windows上,使用HyperTerminal生成一對密鑰
生成密鑰時,可以不設置密碼,設置與否全看個人需求。我認爲我對安全性的需求一般,也就懶得設置密碼了。
單擊Next即可。 如果沒有設置密碼,軟件會彈出詢問,問用戶是否確定不要密碼,此時選擇是即可。
默認情況下生成基於RSA算法的密鑰,密鑰長度爲2048
接下來會進入密鑰生成過程,這個過程中,軟件會提示用戶通過移動鼠標的方式來隨機生成密鑰,下圖是生成密鑰完畢的提示
繼續單擊Next,彈出如下界面
由於我的服務器使用的正是openssh,一般CentOS和ubuntu server都是,所以,只需要保存OpenSSH格式的公鑰和私鑰即可
2. 服務器端設置 CentOS7
打開 /etc/ssh/sshd_config,可以找到如下配置
當客戶端使用密鑰登錄服務器時,服務器端需要知道客戶端的公鑰,而客戶端的公鑰就應保存在上圖配置指定的文件中,即root/.ssh/authorized_keys,假如沒有.ssh文件夾,那麼請自行創建,然後,將前面生成的windows客戶端下的公鑰,上傳到服務器端的root/.ssh文件夾內,並重命名爲authorized_keys。
然後,要開啓公鑰驗證,將PubkeyAuthentication設置爲yes
接下來,禁用密碼登錄,將 PasswordAuthentication 設置爲 no即可。
最後,重啓sshd服務,讓新的配置生效 ( service sshd restart )
3. 在windows的SSH客戶端,使用密鑰登錄服務器
首先,選擇新建連接
然後,選擇連接類型爲SSH,按下確定
填寫服務器IP,並在Key File一欄,選取第一步中windows客戶端生成密鑰對中的私鑰
最後,點擊確定,即可以密鑰登錄的方式遠程登錄到Linux服務器了
登錄成功截圖