51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

保护好你的小鸡!保姆级服务器安全教程!

视频地址:https://www.bilibili.com/BV12L4y187Dy

为什么要做安全防护 {#为什么要做安全防护}

Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的网站、APP、服务、甚至线下基础设施都建立在 Linux 的基石之上,这背后牵涉到巨大的经济利益和商业价值,当然也就意味着黑灰产有巨大的攻击动力。但是这些服务是如此重要、根本不允许出现重大的安全漏洞。于是无数的运维专业人员都在安全攻防的战场上拼搏努力,这才让大家能享受到基本稳定的现代化数字生活。

现在,你拥有了一台 VPS(我们亲切地称它为小鸡),这与你自己的电脑不同,它24小时开机,而且具有一个公网IP,意味着人人都可能可以访问到你的服务器,那就相当于你已经置身于安全攻防战场的第一线、直面所有风险。但与此同时,萌新由于知识和信息的不足,看待安全问题是总是难免两极分化:要么觉得轻如鸿毛和自己没有半点关系,要么觉得重于泰山甚至惶惶不可终日。

  • 对于前者,我的建议是:安全无小事,尽量多查一些安全方面的信息,免得自己真的受了损失才后悔莫及;
  • 对于后者,我的建议是:不用紧张,我们的服务器仍不具有太高的价值、一般不会吸引到高水平的攻击,需要面对的基本都是一些自动化脚本的恶意扫描和登录尝试,跟着本文做一些基础的防护即可。

具体的风险到底是什么 {#具体的风险到底是什么}

正如我们所知,任何人只需要知道【IP 地址】+【端口】+【用户名】+【密码】这四个要素,就能登录你的 VPS 服务器。那很显然,这四要素的安全就是我们要防护的底线。我们来逐一分析:

  1. 【IP 地址】:恶意脚本会随机尝试和扫描 IP 段,可以简单认为是公开信息、无法隐藏

  2. 【端口】:如果使用默认端口,那么【端口 = 22】

  3. 【用户名】:如果使用默认用户,那么【用户名 = root】

  4. 【密码】:密码不存在默认值,一定是由 VPS 后台随机生成或由你自行设置的。也就是说,如果你的服务器都是默认设置,则四要素中的三个已经是已知的,那么你整个服务器的安全,就全部寄托在一串小小的密码上了。这时有几种情况:

    • 如果你用了 VPS 管理后台随机生成密码,它一般包含随机的十几个大小写混杂的字母和符号,相对比较安全
    • 如果你为了好记、把密码改成了类似123456这种超弱的密码,破解你的 VPS 服务器可谓不费吹灰之力
    • 如果你为了好记、把密码改成了比较复杂、但在别的地方用过的密码,其实也并不安全。你要明白黑客手里有作弊器,比如说密码表,包含数万、数十万、数百万甚至更多曾经泄漏的真实密码)
  5. 但你要明白,没有哪个黑客真的要坐在电脑前一次一次的尝试你的密码,全部的攻击尝试都是恶意脚本自动进行的,它会 24 小时不眠不休的工作。也许每天你酣睡之时,你的服务器都在经受着一轮又一轮的冲击。

一旦密码被成功撞破,意味着你的四要素全部被攻击者掌握,恶意脚本就会快速登录服务器、获取服务器的最高 root 控制权、安装部署它的恶意服务,然后就可以用你的服务器来 24 小时做各种坏事(比如挖矿、传播病毒、发送垃圾邮件、欺诈邮件、做 BT 中继、甚至暗网公众节点等等等等)。如果恶意脚本比较克制,其实可以做到相当的隐蔽性。而新人一般也不会去观察留意 VPS 的登录记录、进程变化、CPU 占用变化、流量变化等指标,你其实就很难发现自己被黑了。直到你的 VPS 服务商封禁你的账号、或者收到律师函为止。

  1. 别忘了,你获得 VPS 时大概率需要使用真实的支付信息,你登录各种网站、社交平台时也会留下你的 IP 地址,这些都与你的身份有直接或者间接的关系。于是,一旦这些坏事发生,它们就会不可避免地与你产生关联

所以,一起来跟着下面的教程,来给我们的小鸡做一些基础的安全防护吧。

开始安全防护工作 {#开始安全防护工作}

本文以Ubuntu20.04为例子,Debian的操作也是类似的,CentOS系统会不太一样,请自行搜索相关内容。(强烈安利大家使用Ubuntu或者Debian系统)

任何涉及到安装的操作之前,先更新一下我们安装包的索引,可以的话,顺便更新一下软件。这本身也是安全的一部分,新的软件意味着更少的漏洞。

apt update 
`apt upgrade
`

更新软件包


保持即可,直接回车。 保持默认

更新完毕,我们进入正题。

本次教程讲分为SSH篇宝塔篇全局篇来讲解,后续如果有补充也会更新至相应位置。

SSH篇 {#SSH篇}

1、更改SSH端口 {#1-更改SSH端口}

第一步,我们先来解决【端口 = 22】的问题。(注意:有些 VPS 服务商,默认的端口已经是非 22 端口,那么你可以忽略这一步,当然也可以跟着本文改成别的端口)

  1. 我们要做的第一件事,当然就是【用nano这个文本编辑器打开SSH远程登录程序设置】,在 Windows 下,你会【找到文件并双击】,在 Linux 下该怎么办呢?仔细看看上面的命令说明,是不是就很简单了?没错,就是:

    nano /etc/ssh/sshd_config
    
  2. 文件打开后,你就进入了nano的界面,稍微观察一下,你会发现,它把重要的快捷键都显示在屏幕下方了(下图红框内),直接开卷考试、不用死记硬背,是不是很贴心呢?

    nano的界面

  3. 我们要做的第二件事,是【在打开的文件中找到Port这一项,并修改它的端口】。Port 后面的数字就是 SSH 的端口,一般建议把它改成一个大于1024小于65535的整数(本文以9753为例)。结合nano的快捷键,想一下该怎么操作呢?

    • 使用 ctrl+w 进入搜索模式,然后输入 Port 22 并回车
    • 删除 22 并改成 9753
    • 说明:如果这一行开头有个#,证明这一行【不生效】(被注释掉了),你可像我一样在文件最后写一个不带#的,或者把#删掉就好。

    本文以9753为例,就意味着随着本文的发布,这个端口会变成一个不大不小的特征,也许会被攻击者优先尝试,所以强烈建议你用一个自己想到的其他端口,毕竟,你有 6 万多个端口可以自由选择。

  4. 我们要做的第三件事,是【保存文件并退出】

    • 如果第 3 步你有仔细观察,就会发现保存并不是常见的 ctrl+s
    • 正确的快捷键:保存是 ctrl+o + 回车,退出是 ctrl+x
  5. 我们最后要做的事,是【重启 ssh 服务,使变更生效】

    sudo service sshd restart
    

    注意:为了保证你不会失联,请不要关闭当前的ssh登录窗口!而是另外开一个窗口来测试!

    注意:为了保证你不会失联,请不要关闭当前的ssh登录窗口!而是另外开一个窗口来测试!

    注意:为了保证你不会失联,请不要关闭当前的ssh登录窗口!而是另外开一个窗口来测试! 默认用22端口已经无法登录了

  6. 修改登陆配置

现在新的端口已经生效,下次登录时就要用9753了。

登陆变成了:

ssh root@你的服务器IP -p 9753

用新端口可以登录

如果是用其他客户端,记得修改端口。

2、使用复杂的密码 {#2-使用复杂的密码}

如果你想给当前的用户设置重新设置一个密码,那么可以到这个网站,生成一个复杂的密码,当作你服务器的密码。

https://1password.com/zh-cn/password-generator/

passwd

修改了root密码

出现提示让你修改密码。然后粘贴进去就行了。(注意为了安全的考量,Linux下输入密码是没有显示的)

3、新建普通用户 {#3-新建普通用户}

接下来,我们来解决【用户名 = root】的问题。

首先你要理解, Linux 系统中的root,不仅仅是一个管理员账号那么简单。它是整个系统的【根基】、是系统的主宰、至高无上的神。一旦root账号出现安全问题,整个系统都只能任人鱼肉、无处可逃。那么就跟随我进行操作吧:

  1. 我们要做的第一件事,是【新增一个用户并设定登录密码】,名字你可以随便起,我这里以vpsadmin为例:

    adduser vpsadmin
    

    执行命令后,根据提示操作即可。请务必设置一个用户密码(别忘记设置密码时你时看不到 ****** 的)。之后系统会询问你一些用户的附加信息,这些就可以无视,一路回车即可。

    建立新用户

    本文以vpsadmin为例,就意味着随着本文的发布,这个用户名也会变成一个不大不小的特征,也许会被攻击者优先尝试。所以和端口一样,我强烈建议你用一个自己想到的其他用户名。

  2. 我们要做的第二件事,是【安装sudo功能】(sudo 就是在关键时刻,让普通账户临时获得 root 的神力,战力全开拯救世界)

    apt update && apt install sudo  #Debain默认没有,Ubuntu自身应该是已经有安装的
    

    聪明的你大概已经发现,这一行命令其实是两个命令。前一半 apt update 你之前已经见过并且用过了,是去服务器刷新软件版本信息。后面的 apt install就是这一次要用到的【安装命令】。两条连接在一起,就是让系统去【刷新可用的最新软件,然后安装最新版的sudo程序】。 && 则是把两个命令连起来执行的意思。

  3. 我们要做的第三件事,是【把vpsadmin用户加入sudo名单里,让他有资格借用root的神力】

    visudo
    

    User Privilege Specification 下加入一行 vpsadmin ALL=(ALL) NOPASSWD: ALL 即可。 User Privilege Specification 我要特别说明的是NOPASSWD这个设置,它的意思是vpsadmin用户临时使用root权限时,不用额外输入密码。这与一般的安全建议相反 。我之所以如此推荐,是因为很多新人不顾危险坚持使用root账号就是因为用root时不用重复输入密码、觉得轻松。"两害相权取其轻",我认为【直接用root用户的风险】大于【使用sudo时不用输密码的风险】,所以做了以上的建议。

    如果你希望遵守传统习惯、每次使用sudo时需要输入密码,那么这一行改成 vpsadmin ALL=(ALL:ALL) ALL 即可。

4、禁止root登陆 {#4-禁止root登陆}

  1. 现在你已经逐渐熟悉 Linux 了,所以这次换你思考,我们要做的第一件事是什么呢?没错,还是【用nano编辑器打开SSH远程登录程序设置】,什么,你想不起来怎么操作了?那去复习一下上面的内容再回来吧!............ 正确答案:

    nano /etc/ssh/sshd_config
    
  2. 找到PermitRootLogin Yes这一项,然后把它后面的设定值改为no即可。还记得怎么操作吗?............ 正确答案:

    • 使用 ctrl+w 进入搜索模式,然后输入 PermitRootLogin 并回车

    PermitRootLogin

    • 删除 yes 并改成 no

  3. 保存文件并退出。还记得怎么操作吗?............ 正确答案:

    • 保存是 ctrl+o,然后 回车 确认
    • 退出是 ctrl+x
  4. 重启 ssh 服务,让变更生效。还记得............ 算了直接公布正确答案:

    sudo service sshd restart
    

    注意:为了保证你不会失联,请不要关闭当前的ssh登录窗口!而是另外开一个窗口来测试!

    注意:为了保证你不会失联,请不要关闭当前的ssh登录窗口!而是另外开一个窗口来测试!

    注意:为了保证你不会失联,请不要关闭当前的ssh登录窗口!而是另外开一个窗口来测试!

  5. 下次通过远程登录,root用户已无法连接,

    root用户已无法连接

    用户名就要换成vpsadmin了!如果你用的是类似PuTTY、FinalShell的软件,为方便起见,我们可以把vpsadmin设置成默认登录用户名。(别忘了保存 Session)

    ssh vpsadmin@你的服务器IP -p 9753
    

vpsadmin成功连接

PuTTY设置默认用户名

接下来先跳到全局篇,一会儿再回来。

5、启用 RSA 密钥验证登录并禁止密码登陆(大招) {#5-启用-RSA-密钥验证登录并禁止密码登陆-大招-}

接下来,我们来解决【密码】可能被撞破的问题。

前面我说过,黑客并不是很蠢的用穷举法破解你的密码,而是会用一些比如"密码表"的作弊手段。除非你用的是随机生成的超长密码(比如借助 1Password,或者 macOS 的 keychain 等密码管理工具),否则很容易中招。

超长随机密码虽然安全性有所提高,但是基本上无法记忆,手动输入也十分麻烦易错。为了解决这个困境,我们可以直接弃用【密码验证】方式,改用更安全的【密钥验证】。

所谓的【密钥验证】,就是生成【一对】相关联的密钥文件(公钥和私钥),然后把【公钥】上传到 VPS 备用。每次登录时,SSH 会将【公钥】和【私钥】进行匹配,若验证是正确的【密钥对】,则验证通过。(换言之,你无需记忆和输入复杂的密码,只要保护好【私钥】这个文件不外泄即可)

本文以 RSA 密钥举例,是因为 RSA 密钥在各种设备、各种 SSH 客户端中有广泛悠久的支持历史,且目前依然能提供够用的安全性。但它绝非唯一选择。

其他的常见密钥还有:

  • DSA - 已经从数学层面被证明不安全,所以永远不要用它
  • ECDSA - 密钥小安全性高,但其算法被指留有 NSA 的后门,如果你的 VPS 上有值得 NSA 关注的东西就不要用它
  • Ed25519 - 这是一个与 ECDSA 十分类似的算法,故具有相似的性能优势。同时其文档全部公开,所以普遍认为无后门

所以,如果你的设备和软件都支持的话,我建议优先选择 Ed25519 密钥。

那我们现在就来配置【密钥验证】吧!

这里由于我本鸡已经使用过keygen生成了密钥对,所以以另一台VPS为例子,如果你本地使用的是Linux或者是macOS系统,也是一样的。

# ssh-keygen -t rsa -b 4096 -C "<CLIENT-NAME>"
ssh-keygen -t rsa -b 4096 -C "myvps"

image-20210921151238097 image-20210921151310454

我们服务器上先在家目录下,创建一个.ssh的文件夹 image-20210921151650049

本地鸡子执行下面命令:

# scp -P ssh端口 ~/.ssh/id_rsa.pub <YOURNAME>@<SERVER-IP>:/home/<YOURNAME>/.ssh/authorized_keys
scp -P 9753 ~/.ssh/id_rsa.pub vpsadmin@98.126.18.93:/home/vpsadmin/.ssh/authorized_keys

输入服务器登录密码, image-20210921151538291

成功把本地生成的公钥文件拷贝到了服务器上, image-20210921151720357

检查一下服务器上的.ssh目录,已经有了。 image-20210921151740182

修改 authorized_keys 文件权限为 600 (仅所有者可读可写)

chmod 600 ~/.ssh/authorized_keys

编辑ssh配置文件

sudo nano /etc/ssh/sshd_config #搜索PasswordAuthentication,把yes改成no

image-20210921152001914

由于本地(我的macOS)没有和服务器配置密钥对,现在已经无法连接了。 image-20210921152153410

这台机器上配置了密钥对,依然可以连接,现在全世界也只有这台机子能连上我的服务器。 image-20210921152236243

如果想要让我本地的(我的macOS)也能够连接上服务器,只需要把我本地的机子上生成的公钥另起一行复制到服务器上即可。 image-20210921152645811

测试一下,已经可以成功免密连接。 image-20210921153857203

到这里为止,配合上全局篇的内容你的 VPS 已经完成了基本安全保障,虽然称不上固若金汤,但一般的恶意脚本应该已经无法对你造成伤害了!

宝塔篇 {#宝塔篇}

1、更改宝塔8888端口 {#1-更改宝塔8888端口}

默认宝塔采用8888端口,强烈建议修改!

bt

更改宝塔的端口

2、尽量用反向代理 {#2-尽量用反向代理}

一般反向代理配置:

location / {
  proxy_pass http://127.0.0.1:8080/; #改成你服务的端口号
  rewrite ^/(.*)$ /$1 break;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Upgrade-Insecure-Requests 1;
  proxy_set_header X-Forwarded-Proto https;
}

这样的话,就不需要开发相应的端口给外部访问了,一定程度可以保证安全性。

全局篇 {#全局篇}

1、安装UFW防火墙 {#1-安装UFW防火墙}

Ubuntu默认自己已经是自带ufw防火墙了,只是没有启动而已(如果是Debian的话,需要安装) 自带ufw防火墙

  1. 设置ufw使用默认值
sudo ufw default deny incoming
sudo ufw default allow outgoing

设置ufw使用默认值

  1. 允许SSH连接

    如果没有改端口:

sudo ufw allow ssh

​ 现在我们改了端口:

sudo ufw allow 9753/tcp comment 'SSH'
  1. 允许http连接
sudo ufw allow http
  1. 允许https连接
sudo ufw allow https
  1. 启动ufw防火墙
sudo ufw enable

启动ufw

  1. 查看ufw防火墙状态
sudo ufw status

查看防火墙状态

sudo ufw status numbered

带编号查看防火墙状态

  1. 删除一条规则
sudo ufw delete 5

删除一个开放端口

  1. 重载配置
sudo ufw reload

2、禁止Ping {#2-禁止Ping}

  1. 宝塔用户

如果是宝塔用户,可以在这边禁止Ping 宝塔-禁止Ping

  1. 未安装宝塔的用户
sudo nano /etc/ufw/before.rules

搜索:echo-request,把ACCEPT改成DROP 禁止Ping

3、禁止暴力破解 {#3-禁止暴力破解}

安装Fail2ban

sudo apt update && sudo apt install fail2ban

image-20210921145944792

cd /etc/fail2ban # 进入fail2ban目录
sudo cp fail2ban.conf fail2ban.local  # 复制一份配置文件

image-20210921150042277

默认的是没有配置的,我们加入一个配置

[sshd]
enable = true
port = 9753   # 注意改成自己对应的端口
filter =sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = -1

image-20210921150345955

sudo service fail2ban restart #重启
sudo fail2ban-client status #查看状态
sudo fail2ban-client status sshd #查看sshd的详细状态

image-20210921150422848 image-20210921150440925

sudo fail2ban-client set sshd unbanip 192.0.0.1 #解禁指定IP

好了,我们回到SSH篇的第5点。

最后 {#最后}

其实,只要是在互联网上,只要是有价值的内容,但凡涉及到需要输入密码的,都强烈推荐使用强密码,而不要使用非常简单的密码,有些同学可能觉得麻烦,但等到数据丢了或者账户被盗了之后,你再后悔可能都来不及了。况且,现在已经有很多提供复杂密码的网站或者工具,网站比如:https://1password.com/zh-cn/password-generator/, image-20210921123721465

工具比如之前我们教大家安装过的Bitwarden, image-20210921123819985

而且现在的浏览器也可以贴心地帮我们记住这些乱七八糟的密码, 以Chrome浏览器为例子

还是比较方便的。

还有一些重要的网站,会提供一个叫做"二步验证"的服务,他们会提供一个二维码,然后你下载相应的APP来扫码,会生成一串随时间变化的数字(有点像将军令),每次你登陆网站,除了输入常规的账号密码之外,还会需要额外输入这个二步验证器提供的数字才能登陆,这样可以进一步保证你的账户安全。

一般这个叫做二步验证器的APP有这些: 二步验证器的APP

基于本人的使用体验,这边推荐大家使用Authy,而不是Google Authenticator,因为后者实在是太安全了,万一你手机丢了,是没有办法恢复的(或是你换了个手机,导数据的时候没导过来,又恰巧格式化了手机......)

它们分别长这样: Authy、Google Authenticator

好了,今天就说这么多了,互联网时代,请保护好自己的数据。

参考资料 {#参考资料}

感谢互联网,感谢以下分享的作者们。

https://www.youtube.com/watch?v=sO-afVsDJOA

https://techguides.yt/guides/secure-linux-server/

https://xtls.github.io/document/level-0/ch04-security.html#_4-7-%E4%BD%BF%E7%94%A8-rsa-%E5%AF%86%E9%92%A5%E7%99%BB%E5%BD%95%E5%B9%B6%E7%A6%81%E7%94%A8%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04

附录 {#附录}

安装PuTTY {#安装PuTTY}

虽然 Windows 10 之后的 PowerShell 和 WSL 也可以达到很好的 SSH 操作体验。但是因为并非所有版本的 Windows 都有最新的组件,故本文还是以老牌的 PuTTY 为例,进行 SSH 远程登录的操作详解。(使用其他工具的话、在 SSH 登陆之后的操作都是一样的)

下面就跟我一步步操作吧。

  1. 进入 PuTTY 的官网,选择适合你操作系统的版本下载。(本文以 64 位版本为例)

下载PuTTY

  1. 安装运行后,将会看到 PuTTY 的主界面。现在请拿出你记东西的小本本,在下图的对应位置填入你 VPS 的IP 地址(VPS IP)和端口(VPS PORT)。为了方便以后使用时不用重复输入,我们可以保存会话 (Saved Sessions),未来使用时只要按 Load 即可一键载入设置。

    设置PuTTY

  2. 我建议将 Connection 中的 keepalive 设置为 60 秒,防止你一段时间没有操作之后 SSH 自动断线。另外务必再次保存设置。

    防止频繁断线

注意

对 PuTTY 的任何设置更新都要再次手动保存 Session,不然关闭后就会丢失

  1. 点击 Open 就会进入 SSH 连接窗口,对应下图输入用户名与密码,与你的 VPS 远程主机建立连接。(本文假设默认用户名是 root,另外,在 Linux 系统输入密码的时候,是不会出现 ******这种提示符的,这样可以避免密码长度泄漏,不是你的键盘坏掉了哦!)

    SSH远程登录

PuTTYgen生成密钥对(适合Windows用户使用) {#PuTTYgen生成密钥对-适合Windows用户使用-}

1、运行PuTTYgen (PuTTY 密钥生成器) {#1-运行--PuTTY-密钥生成器-}

位置是 开始菜单 --> 所有程序 --> PuTTY (64-bit) --> PuTTYgen

  1. 点击Generate开始生成(在界面空白处乱晃鼠标增加随机数)

    生成密钥

注意:

本图中是以 2048 位的 RSA 密钥为例的。但实际上,如果要获得与 EDCSA/Ed25519256 位密钥相同的安全性,你需要使用 3072 位的 RSA 密钥。(即右下角的数字改成 3072

  1. 你可以给私钥设置密码,增加一层安全性

  2. 点击 Save public key 保存公钥,文件名为 id_rsa.pub

  3. 点击 Save private key 保存私钥,文件名为 id_rsa (PuTTY 私钥自带.ppk后缀)

  4. 最重要的,将上方红框内的内容,向下滚动全部复制出来并保存,文件名为 authorized_keys。(用 vscode 保存,默认会变成带txt后缀的文本文件,这没关系,之后上传 VPS 时我们会把后缀名去掉)

    保存密钥

2、将公钥上传至 VPS 的vpsadmin用户下 {#2-将公钥上传至-VPS-的用户下}

  1. 这一步如果是机子上装过FinalShell的同学,可以直接用自带的上传文件功能来上传,如果没有FinalShell,可以去官网下载,或者就需要用到WinSCP了。

  2. 官网下载并安装,会提示你导入 PuTTY 的设置,当然一键导入啦!

    一键导入Session

  3. 如果没有提示导入或者你已经提前安装好了,那按照下图进行配置即可

    WinSCP登录设置

  4. WinSCP 左边的目录就是本地电脑上的文件夹和文件,请定位到密钥所在的文件夹

  5. WinSCP 右边的目录则是 VPS 服务器上的文件夹和文件,默认就在 /home/vpsadmin/ 文件夹,此时在请点击右下角 X hidden 来显示隐藏文件

    本地和远程文件夹

  6. 在右边(VPS 中)点击右键并新建文件夹,起名.ssh (注意有一个.

    在VPS中建立放置公钥的文件夹

  7. 将【公钥】authorized_keys上传到.ssh文件夹内

    上传authorized_keys

  8. 在上传时,将【公钥】从 authorized_keys.txt 改名为 authorized_keys(去掉.txt这个后缀名)

    确保没有任何后缀

  9. 完整流程演示如下:

    WinSCP操作完整演示

3、在 VPS 端设置 SSH 启用 RSA 密钥验证登录、同时禁用密码验证登录 {#3-在-VPS-端设置-SSH-启用-RSA-密钥验证登录-同时禁用密码验证登录}

  1. SSH 远程连接到 VPS 上(PuTTY)

  2. 修改 authorized_keys 文件权限为 600 (仅所有者可读可写)

    chmod 600 ~/.ssh/authorized_keys
    
  3. 修改 SSH 配置。这个我们已经用了很多次,但现在我们已经从无所不能的root变成了普通用户vpsadmin,此时的我们是没有权限直接编辑 SSH 配置的。这时候就需要使用sudo命令了:

    sudo nano /etc/ssh/sshd_config
    
  4. 找到(ctrl+w) PasswordAuthentication 改成 no

  5. 找到(ctrl+w) PubkeyAuthentication 改成 yes,然后保存(ctrl+o)退出(ctrl+x)

  6. 重启 SSH 服务。(啰嗦君:别忘了现在需要使用sudo来获得权限)

    sudo systemctl restart ssh
    
  7. 完整流程如下:

    SSH开启密钥验证并禁用密码验证

  8. VPS 端已经设置好了公钥,现在要给 PuTTY 指定私钥位置供登录时使用(啰嗦君:别忘了保存 Session)

    PuTTY指定私钥位置

  9. 至此,【密钥登录】已成功开启、【密码验证】已成功关闭、并且还给 PuTTY 保存了默认的登录用户名和私钥。未来使用 PuTTY 登录时,载入VPS-SERVER配置后,点击Open就可以一键登录了。

    如果你给私钥设置了密码保护,登录时当然还需要输入这个密码才能使用密钥,如下图: 输入私钥密码

  10. 别忘了给WinSCP也做对应的密钥设置,否则之后想要传输文件时就无法登录了:

WinSCP指定私钥位置 注意

任何需要借助 SSH 进行登录的软件都需要密钥验证了,软件过多,无法逐一展示,请根据你的需要自行设置好哦

赞(0)
未经允许不得转载:工具盒子 » 保护好你的小鸡!保姆级服务器安全教程!