首页 技术 正文
技术 2022年11月16日
0 收藏 440 点赞 5,038 浏览 3038 个字

SSH 是远程登录 Linux 服务器的最常见的方式。且 SSH 登录的时候要验证的,相对来讲会比较安全。那只是相对,下面会介绍一些方式提高 SSH 的安全性

SSH 的验证

而SSH 登录时有两种验证方式

  1. 密码认证,要求用户每次登录服务器的时候都要输入密码
  2. 密钥认证,客户端的公钥先保存在服务器的.ssh/authorized_keys中,登录时使用该公钥自动验证,认证成功就不用输入密码都能登录

密码认证的问题

  1. 密码简单容易被人攻破, 密码复杂难记,又比较容易输错。
  2. 容易被人用暴力破解的方式攻击。比如是ncrack。就算没有攻破,服务器各种被人在尝试密码是什么,有种各种被蹂躏的感觉。
  3. 写自动化脚本比较麻烦,需要用 expect 之类的命令

尝试使用暴力破解ssh

安装ncrack并下载一份常用的密码

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.

# 保护 ssh 的方法## 不要使用简单的密码上面被人暴力破解密码的主要原因是用了简单的密码,而使用强密码就相对比较难暴力破解 而何为强密码:*   强密码长度至少有 8 个字符,
* 不包含全部或部分用户帐户名,不能是连贯的名
* 至少包含以下四类字符中的三类:大写字母、小写字母、数字,以及键盘上的符号(如 !、@、#)最好还要定期修改密码## 拉黑 ip若一定要开放密码登录,就有会有人尝试暴力破解
```bash
sudo cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'

用这个命令可以看到有多少“客人”关顾你的服务器. 面对这种情况,就要把这些客人拉进黑名单了。此时我们可以使用DenyHosts这种工具,这个工具的CentosandDebain都有对应有二进制文件,直接yum install denyhosts或者apt-get install denyhosts就行了 配置文件在/etc/denyhosts.conf

    #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被屏蔽,可以:echo “你的IP” >> /usr/share/denyhosts/allowed-hosts 将你的IP加入白名单,再重启DenyHosts

手动解禁ip:

  1. wget http://soft.vpser.net/security/denyhosts/denyhosts_removeip.sh
  2. 如果是centos 7 的,将/etc/init.d/ 的转成 systemctl
  3. sduo sh denyhosts_removeip.sh 待解封的ip 搞定

设置 ssh 不能使用 root 登录

使用ssh登录root用户,毕竟root用户的权限太大了。禁止root用户ssh后,即使密码泄露了,也不能通过ssh远程登录,提高了服务器的安全性。 相关的操作就是把/etc/ssh/sshd_config中的PermitRootLogin yes修改为PermitRootLogin no 再重启一下服务 systemctl restart sshd

不使用密码登录

使用密码登录会有以上的问题,不太安全且不太方便 所以我觉得还是用密钥去认证会比较好。更方便更安全。

生成密钥对

如果你没有包含公钥和私钥的密钥对,你需要生成一个。如果你已经有了想要使用的密钥,请跳到复制公钥的步骤。 要生成新的密钥对,请在本地机器终端输入以下命令:

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

如果有人想登录,但密钥不对会是这种结果

参考资料

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,817
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,900