③ 设置SSH秘钥登录
如果你用过 Git的SSH免密登录
,那这个对你来说就很简单了,SSH的连接
原理及过程如下:
- A → B 发送连接请求;
- B 收到请求,将
自己的公钥
发给 → A;- A 收到
公钥
,用公钥加密B的登录密码
,生成加密密文
发给 → B;- B 收到
加密密文
,用自己的私钥解密信息
,然后与B的登录密码做比较,正确 → 允许A登录;
然后此处用到的是 SSH免密登录
,原理及过程如下:
- A → B 发送连接请求,并带上
自己的公钥
;- B 收到
A的公钥
,检查机器上的授权列表是否包含A的公钥
,存在,
生成一个随机数
,用公钥加密
,生成加密密文
发送 → A;- A 收到
加密密文
,用私钥解密
,得到的解密结果
发送 → B- B 收到
A发来的结果
,与之前生成的随机数
作比较,一致 → 允许A连接;
了解清楚原理与过程,就很easy了,云服务器先设置下 允许秘钥认证
,打开 /etc/ssh/sshd_config
,找到如下内容,去掉前面的 #
:
# 允许密钥认证 PubkeyAuthentication yes # 默认公钥存放位置 AuthorizedKeysFile .ssh/authorized_keys
保存后,重启sshd服务:
# 重启ssh服务 systemctl restart sshd # 附:其他ssh服务相关命令 rpm -qa|grep -E "openssh" # 查看是否安装了全部的ssh服务 systemctl status sshd # 查看ssh服务状态 systemctl start sshd # 启动ssh服务 systemctl stop sshd # 停止ssh服务
接着 本地PC
用 Git Bash
命令行生成 一对密钥
# 创建.ssh目录并进入 mkdir ~/.ssh cd ~/.ssh # 生成密钥,回车两次分别跳过 (密钥保存位置、认证密码) ssh-keygen -t rsa -b 2048
接着可以在 ~/.ssh
目录下看到生成的 公钥(id_rsa.pub)
及 私钥(id_rsa)
。 再接着通过 ssh-copy-id
命令把公钥复制到远程主机 对应账户下
的 authorized_keys
文件上.
ssh-copy-id julia@xxx.xxx.xxx.xxx -p 1024
配置成功后,此时使用ssh即可直接登录:
ssh julia@xxx.xxx.xxx.xxx -p 1024
来到.ssh路径下可以看到 authorized_keys
文件,内容也是本地PC的公钥。
如果删除信任公钥,删除文件里对应内容即可,秘钥测试登录成功后,可以禁用密码登录,提高服务器的安全性,依然是修改 /etc/ssh/sshd_config
:
PasswordAuthentication no
重启下sshd服务,然后就不能使用密码登录了~
附:WinSCP SSH 秘钥登录服务器配置,点
高级
,然后选择SSH → 验证 → 密钥文件
然后选中自己的私钥,会提示转换格式,确定,保存就好
接着,直接登录,弹出下述对话框,点是,后续登录就不用输入密码了。
④ 安装DenyHosts
描述:(官网:denyhosts.sourceforge.net/)
基于Python编写,用于防止SSH暴力破解的开源软件,通过对SSH的日志文件
/var/log/secure
进行分析,查找所有尝试登录,过滤出成功与失败的尝试。记录所有尝试登录失败的用户名与主机,如果超过阈值,则记录主机。
保持对每个登录失败用户的跟踪,保持对每个可疑的登录进行跟踪(虽登录成功,
但存在很多次失败记录),将可疑地址的主机加入到
etc/hosts.deny
文件中。
下载安装:
# 下载 wget http://jaist.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz # 解压 tar -zxvf DenyHosts-2.6.tar.gz -C /usr/local/bin # 进入解压文件夹 cd /usr/local/bin/DenyHosts-2.6 # 安装Python2 yum install python2 -y # 编译安装setup.py python2 setup.py install cd /usr/share/denyhosts/ # 配置文件 cp denyhosts.cfg-dist denyhosts.cfg # 启动文件 cp daemon-control-dist daemon-control # 添加root权限 chown root daemon-control # 修改为可执行文件 chmod 700 daemon-control # 接着就可以直接启动 ./daemon-control start # 注:如启动报错/usr/bin/env: python: No such file or directory # 可通过下述命令设置系统默认的Python版本 alternatives --set python /usr/bin/python2 # 还可以设置为开机自启动 cd /etc/rc.d/init.d/ ln -s /usr/share/denyhosts/daemon-control denyhosts chkconfig --add denyhosts chkconfig denyhosts on chkconfig --list denyhosts
部分配置文件内容说明 (vim /usr/share/denyhosts/denyhosts.cfg):
Tips:w代表周,d代表天,h代表小时,s代表秒,m代表分钟
配置 | 描述 |
SECURE_LOG = /var/log/secure | ssh日志文件 |
HOSTS_DENY = /etc/hosts.deny | 禁止访问主机IP文件 |
PURGE_DENY = 4w | 过多久后清除已阻止IP |
BLOCK_SERVICE = sshd | denyhosts要阻止的服务名 |
DENY_THRESHOLD_INVALID = 3 | 允许无效用户登录失败的次数 |
DENY_THRESHOLD_VALID = 10 | 允许普通用户登录失败的次数 |
DENY_THRESHOLD_ROOT = 6 | 允许ROOT用户登录失败的次数 |
PURGE_THRESHOLD = | 某个IP最多被解封几次,永久封禁 |
以后查看host.deny文件就可以找到攻击ip的记录了:
cat /etc/hosts.deny cat /etc/hosts.deny | wc -l
立马就有981条记录了:
一个建议:添加信任IP,把自己常用的IP加到 /etc/hosts.allow
文件中
sshd: xxx.xxx.*.*: allow
以防自己哪天多次输错密码,访问不了服务器~