SSH简明安全规划

禁止使用口令只允许使用密钥建立 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 端口

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

idea2017 学习教程+破解软件

idea2017 学习教程+破解软件 ? 下面讲讲我是如何在十分钟之内安装并破解该软件。 1.首先,我找到了 IntelliJ IDEA的官网:...

34830
来自专栏Laoqi's Linux运维专列

mysql数据备份方案

34830
来自专栏IT可乐

邮件实现详解(二)------手工体验smtp和pop3协议

  上篇博客我们简单介绍了电子邮件的发送和接收过程,对参与其中的邮件服务器,邮件客户端软件,邮件传输协议也有简单的介绍。我们知道电子邮件需要在邮件客户端和邮件服...

439100
来自专栏云计算教程系列

如何在Debian 9上安装和配置Nextcloud

Nextcloud是ownCloud的一个分支,它是一个文件共享服务器,允许您将个人内容(如文档和图片)存储在集中位置,就像Dropbox一样。与Nextclo...

1.8K30
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Stunnel加密流量到Redis

Redis是一个开源键值数据存储,使用内存存储模型和可选的磁盘写入来实现持久性。它具有事务,发布/订阅消息传递模式以及其他功能之间的自动故障转移功能。Redis...

35540
来自专栏L宝宝聊IT

Linux远程访问及控制(SSH)

39920
来自专栏企鹅号快讯

用不到 100 行的 Golang 代码实现 HTTP 代理

我们的目标是实现一个能处理 HTTP 和 HTTPS 的代理服务器。代理 HTTP 请求的过程其实就是一个解析请求、将该请求转发到目的服务器、读取目的服务器响应...

52080
来自专栏FreeBuf

文件上传限制绕过技巧

文件上传漏洞是web安全中经常利用到的一种漏洞形式。一些web应用程序中允许上传图片,文本或者其他资源到指定的位置,文件上传漏洞就是利用这些可以上传的地方将恶意...

39420
来自专栏极客生活

Charles抓https显示unknown解决方法

23720
来自专栏上善若水

011SSH免密码登陆

单向无密码访问远程服务器操作比较简单,比如服务器A需要无密码访问服务器B(A–>B),那么只需要在服务器A生成密钥对,将生成的公钥上传到服务器B的相关用户目录下...

19340

扫码关注云+社区

领取腾讯云代金券