禁止使用口令只允许使用密钥建立 SSH 连接

1.创建 SSH KEY

使用ssh-keygen生成一个密钥对,并且将公钥注册到服务器的 $HOME/.ssh/authorized_keys 文件。

将私钥下载回自己使用的客户端。

具体操作为在用户的家目录下敲:

ssh-keygen -t rsa

表示创建一对rsa密钥。

随后三次回车(第一次是默认名称、第二次是默认空密码或也可以输入密码防止别人盗了你的私钥文件后直接使用、第三次是确认)之后,

在用户的家目录下会生成.ssh/(隐藏目录)和.ssh/下的id_rsa(私钥,下载回本地使用)、id_rsa.pub(公钥,要追加到认证文件)

接下来要做的是将公钥追加到authorized_keys文件上(默认的名字,当然你也可以改)

这个文件随追加命令敲完后而生成

cat  id_rsa.pub >> authorized_keys

注意,以上命令操作都是在已经cd进.ssh目录下敲的,不然的话你要敲全路径。

还有特别重要的一步,修改authorized_keys文件为600权限!

chmod 600 authorized_keys

如果这一步没做将会导致ssh连接不成功,认证失败。

其实除了authorized_keys文件需要600权限以外,.ssh/目录也是需要700权限,

只不过在敲ssh-keygen -t rsa 三次回车默认创建的.ssh/目录就是700罢了。

2.确保启用 SSH 公钥认证功能

查看 /etc/ssh/sshd_config 文件,确保以下两条为 yes且不是注释状态:

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile          .ssh/authorized_keys        #指定认证文件,默认值

一般它们默认都是 yes,如果不是,请修改为 yes,保存并且重启 SSH 服务:

$ sudo service ssh reload

3.禁止密码安全验证(也就是禁止通过密码方式登录)

编辑 /etc/ssh/sshd_config 文件:

ChallengeResponseAuthentication no

PasswordAuthentication no

PermitEmptyPasswords no

UsePAM no

保存并重启 SSH 服务:

$ sudo service ssh restart

注意这个时候先不要关闭自身在ssh连接中的客户端,应重新打开一个ssh连接去验证效果。

ssh配置文件加强的安全设置

在创建好密钥登录并验证成功后,做以下加强的安全设置:

禁止root通过ssh登录:PermitRootLogin  no

限制ssh方式的用户登录:AllowUsers  yunwei

这里填允许的用户名,举个例子yunwei是操作系统上的用户,

这样之后,就只能是你允许的yunwei用户可以通过ssh并且是使用密钥的方式才能登录。

保存并重启 SSH 服务:

$ sudo service ssh restart

针对固定IP进行允许和禁止登录:

编辑/etc/hosts.allow配置文件中添加设置允许登录的IP

例如:sshd:192.168.1.22:allow

编辑/etc/hosts.deny文件,设置sshd:ALL

也就是说,我们禁止了所有IP,但是允许了192.168.1.22这个ip登录。

修改侦听的port

默认port值是22,可以修改成其它自定义端口,但要注意相关的iptables放行。

还有ListenAddress这一项是指定sshd监听的网络地址,一般你只有一个IP地址的话就无所谓设置了,如果有两张网卡,一个是内网ip,一个是外网IP,只想在内网能SSH的话就在这里设置。

例如:ListenAddress 192.168.1.12:22  (这里假设服务器IP是192.168.1.12)

认证策略

LoginGraceTime   限制用户必须在指定的时间内认证成功,默认120秒,可修改为更短。

MaxAuthTries    指定每个连接最大允许的认证次数。默认值是6.

如果失败认证的次数超过这个数值的一半,连接将被强制断开。且会生成额外的失败日志消息。

PermitUserEnviroment 默认值是no,注意如果是yes的话要改回no,防止绕过访问控制。

注意sshd配置文件中的Subsystem 项,和sftp有关,如果确认自己的文件通过sftp上传和下载完成后,可以考虑出于安全注释掉,要用的时候再重新开?

 

SSH客户端选择通过密钥文件的方式登录,

因为直接禁止了密码和root的登录,所以杜绝了ssh的暴力破解密码可能。当然密钥文件就要妥善保管了。

例如下图:

如果你创建密钥文件的时候选择了同时为密钥文件创建密码,那就更加保证了即使密钥文件被黑客盗取了,他也无法第一时间就拿来使用。

如果是用命令行的方式ssh的话则如下图:

sudo ssh -i 密钥文件所在路径 用户@服务器IP地址 -p 端口



文:铁乐猫

2017-9-19

个人博客原文链接地址:http://www.tielemao.com/263.html

ssh简明安全规划的更多相关文章

  1. mysql高可用框架-MHA

    MHA高可用架构 用一个管理节点监控后端数据库主库可用性 提供VIP漂移接口,不提供具体方法 提供补全从库日志的脚本   MHA 监控主库,提供自动主从切换: 提供VIP漂移接口 提供补全从库日志的脚 ...

  2. Linux -- 之HDFS实现自动切换HA(全新HDFS)

    Linux -- 之HDFS实现自动切换HA(全新HDFS) JDK规划 1.7及以上  https://blog.csdn.net/meiLin_Ya/article/details/8065094 ...

  3. MongoDB复制集搭建(3.4.17版)

    ==版本== mongodb-linux-x86_64-rhel70-3.4.17.tgz ==准备== 3个节点,我这里的IP及hostname分别是: 10.11.2.52 dscn49 10.1 ...

  4. 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划

    今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...

  5. MacBook通过SSH远程访问Parallel中的Ubuntu简明教程

    作为一个前端,后端也需要了解,最终选择PHP入手学习,本来想选择Python,思前想后还是PHP作为Web开发比较合适,环境最终选择Ubuntu开发,由于是第一次,遇到不少坑,经过不懈的努力不断Goo ...

  6. 【荐】如何规划 Nginx 网站目录的权限(用户,用户组,ssh,sftp)

    从上一篇文章:PHP网站(nginx.php-fpm.mysql) 用户权限解析,可以学习了解到,nginx 和 php-fpm 的用户是如何运作的. 有个工作场景: 1.公司的一台 CentOS 服 ...

  7. 简明 Git 命令速查表(中文版)

    原文引用地址:https://github.com/flyhigher139/Git-Cheat-Sheet/blob/master/Git%20Cheat%20Sheet-Zh.md在Github上 ...

  8. Docker简明教程

    Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...

  9. git 简明使用手册

    git 使用简明手册     git 是由Linus Torvalds领衔开发的一款开源.分布式版本管理系统,显然,git最初是为了帮助管理Linux内核开发而开发的版本控制系统. 版本控制系统本身并 ...

随机推荐

  1. 【前端开发】--js弹框

    js三种弹框 一.普通弹框 这类弹框就是仅仅是个提示作用,并不会做其它操作 关键词:alert()    这个没啥好说的,就是一个弹框.  二.判断弹框     这类框有一个判断作用 关键字:conf ...

  2. react入门到进阶(三)

    一.react样式 1.内联样式 在以前写html+css的时候,引入css的时候有一种方法就是内联,而在react中又有些不一样,样式是用变量的形式,如下 const styleComponentH ...

  3. Linux中nginx手动安装

    本分类下有一个环境一键安装.那这背后发生了什么呢?咱们手动使用源码进行安装. 1.首先保证有一个能联网的centos. 2.百度 ningx 官网   点download  http://nginx. ...

  4. SQL Server学习之路(四):“增删改查”之“删”

    0.目录 1.前言 2.通过SSMS删除 3.通过SQL语句删除 3.1 删除单行数据 3.2 删除所有行数据 3.3 删除表和数据库 1.前言 增删改查都是对数据的操作,其中"删" ...

  5. Hibernate框架进阶(上篇)

    导读 前面一片文章介绍了Hibernate框架的入门,主要是讲解Hibernate的环境搭建和简单测试,有兴趣的童鞋出门左转.本文在入门的基础上进行Hibernate的进阶讲解,分为上中下三篇,本篇为 ...

  6. Dubbo源码学习--服务发布(DubboProtocol、Exporter)

    在Dubbo服务发布的整体流程一文中,只是分析了服务发布的整体流程,具体的细节还没有进一步分析.本节将继续分析服务暴露的过程.在ServiceConfig中通过一句话即可暴露服务,如下: Export ...

  7. 一键架设FastDFS分布式文件系统脚本,基于Centos6

    一.使用背景 业务驱动技术需要,原来使用 FTP和 Tomcat upload目录的缺陷日渐严重,受限于业务不断扩大,想使用自动化构建,自动化部署,Zookeeper中心化,分布式RPC DUBBO等 ...

  8. java 之 职责链模式(大话设计模式)

    目前很多OA办公自动化软件,加快了办公效率,简化流程.相信很多小伙伴都用过.笔者了解到的大多数办公软件底层实现流程大多数采用的都是Activity或者是JBPM框架. 今天笔者要说的也是类似于流程的一 ...

  9. 【本地资源路径&&网络资源路径&&正反斜杠在Java中的用法】

    一.概念和用法 左正右反 先来看看转义字符的概念:通过 \ ,?来转变后面字母或符号的含义.意思就是改变字母本身的含义. 以"\"符号为例,JAVA中有很多操作,例如文件操作等,需 ...

  10. Sublime Text 3 常用快捷键

    一. 选择类       Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.     Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并 ...