SSH 是遠程登陸 Linux 服務器的最多見的方式。且 SSH 登陸的時候要驗證的,相對來說會比較安全。那只是相對,下面會介紹一些方式提升 SSH 的安全性html
而SSH 登陸時有兩種驗證方式linux
.ssh/authorized_keys
中,登陸時使用該公鑰自動驗證,認證成功就不用輸入密碼都能登陸expect
之類的命令安裝ncrack
並下載一份經常使用的密碼git
ncrack -p 22 --user root -P 500-worst-passwords.txt 192.168.31.121
結果以下 ``` Starting Ncrack 0.6 ( http://ncrack.org ) at 2018-01-27 14:20 CST Discovered credentials for ssh on 192.168.31.121 22/tcp: 192.168.31.121 22/tcp ssh: 'root' '123456' Ncrack done: 1 service scanned in 96.06 seconds.github
# 保護 ssh 的方法 ## 不要使用簡單的密碼 上面被人暴力破解密碼的主要緣由是用了簡單的密碼,而使用強密碼就相對比較難暴力破解 而何爲強密碼: * 強密碼長度至少有 8 個字符, * 不包含所有或部分用戶賬戶名,不能是連貫的名 * 至少包含如下四類字符中的三類:大寫字母、小寫字母、數字,以及鍵盤上的符號(如 !、@、#) 最好還要按期修改密碼 ## 拉黑 ip 若必定要開放密碼登陸,就有會有人嘗試暴力破解 ```bash sudo cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'
用這個命令能夠看到有多少「客人」關顧你的服務器. 面對這種狀況,就要把這些客人拉進黑名單了。此時咱們可使用DenyHosts這種工具,這個工具的Centos
andDebain
都有對應有二進制文件,直接yum install denyhosts
或者apt-get install denyhosts
就好了 配置文件在/etc/denyhosts.conf
centos
#sshd日誌文件,它是根據這個文件來判斷的,不一樣的操做系統,文件名稍有不一樣。 SECURE_LOG = /var/log/secure #控制用戶登錄的文件 HOSTS_DENY = /etc/hosts.deny #過多久後清除已經禁止的IP,如5m(5分鐘)、5h(5小時)、5d(5天)、5w(5周)、1y(一年) PURGE_DENY = 5m DAEMON_PURGE = 5m #禁止的服務名,能夠只限制不容許訪問ssh服務,也能夠選擇ALL BLOCK_SERVICE = sshd #容許無效用戶失敗的次數 DENY_THRESHOLD_INVALID = 5 #容許普通用戶登錄失敗的次數 DENY_THRESHOLD_VALID = 10 #容許root登錄失敗的次數 DENY_THRESHOLD_ROOT = 5 #是否作域名反解 HOSTNAME_LOOKUP=NO #日誌文件 DAEMON_LOG = /var/log/denyhosts
其中ip白名單在/etc/hosts.allow
,禁止訪問ssh的名單在/etc/hosts.deny
安全
手動解禁ip:bash
/etc/init.d/
的轉成 systemctl
sduo sh denyhosts_removeip.sh 待解封的ip
搞定使用ssh
登陸root
用戶,畢竟root
用戶的權限太大了。禁止root
用戶ssh
後,即便密碼泄露了,也不能經過ssh
遠程登陸,提升了服務器的安全性。 相關的操做就是把/etc/ssh/sshd_config
中的PermitRootLogin yes
修改成PermitRootLogin no
再重啓一下服務 systemctl restart sshd
服務器
使用密碼登陸會有以上的問題,不太安全且不太方便 因此我以爲仍是用密鑰去認證會比較好。更方便更安全。ssh
若是你沒有包含公鑰和私鑰的密鑰對,你須要生成一個。若是你已經有了想要使用的密鑰,請跳到複製公鑰的步驟。 要生成新的密鑰對,請在本地機器終端輸入如下命令:tcp
ssh-keygen
假設你的本地用戶叫 localuser
,你會看到的輸出以下所示
Generating public/private rsa key pair. Enter file in which to save the key (/Users/localuser/.ssh/id_rsa):
按回車鍵以接受這文件名和路徑(或者輸入新的名稱) 下一步,系統會提示你輸入密碼確保密鑰的安全。你能夠輸入密碼或者將密碼留空。 注意:若是你將密碼留空,你能夠用私鑰進行身份驗證,不輸入再輸入密碼。若是你輸入密碼了,你須要私鑰和密碼才能登錄。使用密碼保護密碼會更加安全,但二者都有本身的用途,而且都比基本密碼驗證更安全。 這會在 localuser 的Home
(主)目錄的 .ssh
文件夾 中生成一個私鑰 id_rsa
和一個公鑰 id_rsa.pub
。記住私鑰不要和任何不應訪問你服務器的人共享。
複製公鑰有兩種方式,手動檔和自動擋
作的東西很簡單,就是將本機的公鑰字符串複製到"~/.ssh/authorized_keys" 若服務器中沒有.ssh
文件夾則須要本身建立
cd ~ mkdir .ssh chmod 700 ~/.ssh cd ssh touch authorized_keys chmod 600 authorized_keys
複製公鑰內容
scp id_rsa.pub userName@host:/home/userName/.ssh/wait_to_authorized_key
ssh 登陸後
cat wait_to_authorized_key >> authorized_keys
手動複製密鑰太麻煩了,so 懶惰的人會用
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
自動生成公鑰,並上傳爲服務器的.ssh/authorized_keys
若服務器沒有.ssh
會自動建立對應的文件和賦予文件對應的權限
既然已經能夠經過密鑰去認證,認爲那臺機器是能夠信任的,那麼最好就是禁止密碼登陸,這樣的話就不怕暴力破解了。 把/etc/ssh/sshd_config
中的PasswordAuthentication yes
修改成PasswordAuthentication no
再重啓一下服務
systemctl restart sshd
若是有人想登陸,但密鑰不對會是這種結果