一、前言

vps老是被人爆破,虽然我是使用密钥登录ssh,但是一直被爆破“感觉”不爽,本篇是配置root限制ssh使用密钥,配合fail2ban-client统计黑名单IP,放在GitHub上面.

提前阅读:

二、配置

1.创建普通用户

为了防止密码丢失造成不必要麻烦,建议创建一个无sudo权限的用户(默认创建是没有sudo权限)

useradd -m -s /bin/bash Fungit
passwd Fungit

尝试使用Fungit是否可以密码登录并且可以使用密码切换到root

ssh Fungit@ip
su root

2.配置密钥

生成密钥

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_test

导入公钥

ssh-copy-id -i ~/.ssh/id_rsa_test.pub root@ip
# 或者
cat ~/.ssh/id_rsa_test.pub | ssh root@ip "uumask 077;mkdir -p ~/ssh;cat - >> ~/.ssh/authorized_keys"

修改ssh配置文件

vim /etc/ssh/sshd_config

PasswordAuthentication yes
PermitRootLogin without-password

ps: 两个的意思是允许非root用户密码登录,

重启ssh服务

systemctl restart sshd

三、IP黑名单

请看banip.txt,GitHub上面有空再整理,还有一个问题,怎么“方便”的将所有vps的IP汇总一起。

统计IP

fail2ban-client status sshd | grep 'Banned IP list' | sed 's/.*://' |  sed 's/ /\n/g' | sed 's/[ \t]*//g' | wc -l

去重排序
sort -n $BANIP | sed 's/[ \t]*//g' | uniq

PS1环境变量

通过定义PS1环境变量即可实现。
PS1的常用参数以及含义:
\d :代表日期,格式为weekday month date,例如:“Mon Aug 1”
\H :完整的主机名称
\h :仅取主机名中的第一个名字
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称
\W :利用basename取得工作目录名称,只显示最后一个目录名
# :下达的第几个命令
$ :提示字符,如果是root用户,提示符为 # ,普通用户则为 $

颜色对照表:
F B
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色

PS1="\[\e[32;1m\][\h \W] \$ \[\e[0m\]"
#PS1='\[\e[37;1m\][\[\e[31;1m\]\u\[\e[34;1m\]@\[\e[32;1m\]\h \[\e[31;1m\]\w \[\e[33;1m\]\t\[\e[37;1m\]]\[\e[32;1m\]\$\[\e[m\]'