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
若是有人想登陆,但密钥不对会是这种结果