Linux 中提高的 SSH 的安全性
SSH 是远程登录 Linux 服务器的最常见的方式。且 SSH 登录的时候要验证的,相对来讲会比较安全。那只是相对,下面会介绍一些方式提高 SSH 的安全性
SSH 的验证
而SSH 登录时有两种验证方式
- 密码认证,要求用户每次登录服务器的时候都要输入密码
- 密钥认证,客户端的公钥先保存在服务器的
.ssh/authorized_keys
中,登录时使用该公钥自动验证,认证成功就不用输入密码都能登录
密码认证的问题
- 密码简单容易被人攻破, 密码复杂难记,又比较容易输错。
- 容易被人用暴力破解的方式攻击。比如是ncrack。就算没有攻破,服务器各种被人在尝试密码是什么,有种各种被蹂躏的感觉。
- 写自动化脚本比较麻烦,需要用
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这种工具,这个工具的Centos
andDebain
都有对应有二进制文件,直接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:
- wget http://soft.vpser.net/security/denyhosts/denyhosts_removeip.sh
- 如果是centos 7 的,将
/etc/init.d/
的转成systemctl
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
如果有人想登录,但密钥不对会是这种结果
参考资料
Linux 中提高的 SSH 的安全性的更多相关文章
- [转] Linux 中提高 VsFTP 服务器的安全性
FTP是互联网应用中的一个元老级人物了,其方便企业用户文件的共享.但是,安全问题也一直伴随在FTP左右.如何防止攻击者通过非法手段窃取FTP服务器中的重要信息;如何防止攻击者利用FTP服务器来传播木马 ...
- (转)详解Linux中SSH远程访问控制
详解Linux中SSH远程访问控制 原文:http://blog.51cto.com/dengqi/1260038 SSH:是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能(使用TC ...
- Linux中解决SSH连接慢问题
[转载]来源:http://www.bkjia.com/xtzh/893669.html [转载原因]:其他文章都是修改服务器端配置,但为了保证服务器端安全问题,一般情况下最好不要修改服务器端配置.因 ...
- Linux中FTP远程传输,SSH远程连接,以及SCP远程拷贝
常用服务器ftp.ssh 1. Linux常用服务器构建-ftp服务器 ftp服务器 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”. 用于 ...
- Linux 中的rsh,ssh
第一部分 rsh 的安装与配置 http://www.ttlsa.com/linux/configure-rsh-rcp-scp-on-centos/ http://www.ahlinux.com/s ...
- 在Xshell中上传下载文件到本地(linux中从多次ssh登录的dbserver里面的文件夹)
在Xshell中上传下载文件到本地(linux中从多次ssh登录的dbserver里面的文件夹) 1 列出所有需要copy的sh文件 -bash-4.1$ ll /mysqllog/osw/*.sh ...
- linux中ssh登录Permanently added (RSA) to the list of known hosts问题解决
文章出自http://www.2cto.com/os/201307/227199.html linux中ssh登录Permanently added (RSA) to the list of know ...
- 解决linux中使用git,ssh每次都要输入密码
在linux中使用git,去提交或者下载代码都是很方便的,但是最近新配置了一套系统,发现每次git pull或者其他动作都需要输入密码. 想一想不对劲啊,我使用的是ssh的方式clone的代码,而且在 ...
- 限制SSH用户访问Linux中指定的目录
限制SSH用户访问Linux中指定的目录 http://os.51cto.com/art/201703/534895.htm#topx http://www.cnblogs.com/lykyl/arc ...
随机推荐
- 【Guava】使用Guava的RateLimiter做限流
一.常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法. 1.漏桶算法 漏桶算法的原理比较简单,请求进入到漏桶中,漏桶以一定的速率漏水.当请求过多时,水直接溢出.可以看出,漏桶算法可以强制 ...
- How Tomcat works — 三、tomcat启动(2)
在了解了tomcat 的一些基本组件之后,学习启动过程就更容易理解了,因为启动过程就是启动各个组件. 目录 启动顺序 Bootstrap类 Catalina类 StandardServer类和Stan ...
- Java 容器源码分析之 Set
Set 表示由无重复对象组成的集合,也是集合框架中重要的一种集合类型,直接扩展自 Collection 接口.在一个 Set 中,不能有两个引用指向同一个对象,或两个指向 null 的引用.如果对象 ...
- Python机器学习笔记:常用评估指标的用法
在机器学习中,性能指标(Metrics)是衡量一个模型好坏的关键,通过衡量模型输出y_predict和y_true之间的某种“距离”得出的. 对学习器的泛化性能进行评估,不仅需要有效可行的试验估计方法 ...
- 第1章 ssh命令和SSH服务详解
基础服务类系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种 ...
- MySQL高可用之组复制(1):组复制技术简介
MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...
- 翻译:INSERT(已提交到MariaDB官方手册)
本文为mariadb官方手册:INSERT的译文. 原文:https://mariadb.com/kb/en/insert/我提交到MariaDB官方手册的译文:https://mariadb.com ...
- Linux命令-用户及权限管理
一.权限管理linux系统中对文件权限的描述机制: u g od r w x r w x r - x (r读,w写,x执行)文件 所有者 所属组 其他人可以表示为二进制: 111 111 101也可以 ...
- Centos7.6 在LNMP上部署禅道
一.下载禅道,并传到你的服务器上面的/opt文件下. http://dl.cnezsoft.com/zentao/7.3/ZenTaoPMS.7.3.stable.zbox_64.tar.gz 二.使 ...
- 总结下Mysql分表分库的策略及应用
上月前面试某公司,对于mysql分表的思路,当时简要的说了下hash算法分表,以及discuz分表的思路,但是对于新增数据自增id存放的设计思想回答的不是很好(笔试+面试整个过程算是OK过了,因与个人 ...