一、前言
vps老是被人爆破,虽然我是使用密钥登录ssh,但是一直被爆破“感觉”不爽,本篇是配置root限制ssh使用密钥,配合fail2ban-client统计黑名单IP,放在GitHub上面.
提前阅读:
二、配置
1.创建普通用户
为了防止密码丢失造成不必要麻烦,建议创建一个无sudo权限的用户(默认创建是没有sudo权限)
useradd -m -s /bin/bash Fungit passwd Fungit
|
尝试使用Fungit
是否可以密码登录并且可以使用密码切换到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服务
三、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\]'
|