1.摘要
你是不是每次登录 VPS 时都得输入一长串复杂的密码?这不仅麻烦,而且密码设置不够复杂的话,服务器还很可能面临暴力破解的风险。实际上,我相信很多朋友在查看服务器的 SSH 日志时,都会发现每天都有成百上千的暴力破解登录尝试。想想都让人心慌。
但别担心,今天我就带你了解一种更加安全且方便的登录方式:SSH 密钥登录。这就像是你家门口的指纹锁,只有你的“指纹”能解锁别人根本无法突破。配置好 SSH 密钥后,你将彻底摆脱每次都输入密码的烦恼。接下来,我将手把手教你如何在 VPS 上配置 SSH 密钥,实现免密登录。不论你是 Linux、Mac 还是 Windows 用户,我都会详细讲解每一步。整个过程非常简单,跟着做,10 分钟就能搞定。
2.什么是 SSH 密钥?它有什么优势?
首先,大家可能会疑惑,什么是 SSH 密钥?它有什么特别的呢?简单来说,SSH 密钥是一对数字“钥匙”,包括公钥和私钥。公钥就像是你家门口的锁,而私钥就是打开这把锁的“钥匙”。SSH 密钥的工作方式基于非对称加密,也就是说即使有人在网络上监听你的信息,也无法获取私钥内容,这使得 SSH 密钥比传统的密码方式更加安全。
公钥:用来放在 VPS 服务器上,相当于把锁装在门上。
私钥:保存在你自己的电脑上,只有你知道它的内容,就像是你手里的钥匙。
每次连接 VPS 时,系统会用私钥验证公钥,匹配成功后就能直接登录,不需要输入密码。这不仅提高了安全性,还大大提升了操作的便捷性。
3.为什么使用 SSH 密钥登录 VPS?
也许你会问,为什么不继续使用传统的密码登录呢?其实,SSH 密钥登录不仅更加安全,而且能提高管理多台 VPS 的效率。来看一下它的几个优点:
大幅提升安全性
密码登录很容易被暴力破解,而 SSH 密钥采用的加密算法非常强大,一个 2048 位的 RSA 密钥几乎无法被破解,安全性远超普通密码。免密登录,操作更高效
配置完成后,只需执行ssh user@your-server-ip,就能直接登录,再也不用输入那串繁琐的密码。特别是对于同时管理多台 VPS 的朋友,这种方式简直太方便了。支持禁用密码登录
使用 SSH 密钥后,你可以禁用密码登录功能,这样即便攻击者知道你的用户名,也无法暴力破解进来,从根本上降低了风险。适合自动化运维
无论是备份脚本、部署程序还是批量管理任务,SSH 密钥都能实现无人值守的安全连接,避免将明文密码写入脚本,增强了系统的安全性。
因此,配置 SSH 密钥登录已经是 VPS 安全管理中的基础步骤,掌握它,能够大大提升你的运维效率。
3.1生成 SSH 密钥对
现在,来看看如何生成 SSH 密钥对。其实这一步非常简单,不管你是使用 Linux、Mac 还是 Windows,都可以通过几条命令轻松搞定。
打开终端
Windows:按
Win + R,输入“powershell” 或 “cmd”,按回车打开。Mac:按
Command + 空格,输入“终端” 或 “Terminal” 打开。Linux:按
Ctrl + Alt + T或在应用菜单里找到“终端”。
执行生成密钥命令
在终端输入以下命令来生成密钥:
ssh-keygen -t rsa -b 4096 -C "你的邮箱或备注(注释信息)"
这条命令的意思是:
ssh-keygen:生成 SSH 密钥的命令-t rsa:指定使用 RSA 算法生成密钥-b 4096:设置密钥长度为 4096 位(越长越安全)-C "备注信息":附加一个备注,帮助你标记这个密钥
设置密钥保存位置
Enter file in which to save the key (/home/your_username/.ssh/id_rsa):按下回车Enter后,系统会询问你保存密钥的路径,直接按回车使用默认路径即可:
Linux/Mac:
~/.ssh/id_rsaWindows:
C:\Users\你的用户名\.ssh\id_rsa
这个默认位置是 SSH 客户端自动查找密钥的地方,用默认位置最省事,连接服务器时不需要额外指定密钥文件路径。
设置密钥密码(Passphrase)
接下来系统会问你是否要给私钥设置一个密码:
Enter passphrase (empty for no passphrase):这里我给你两个建议:
如果追求最高安全性:设置一个密码。这样即使别人拿到了你的私钥文件,没有这个密码也用不了。但每次连接VPS时,你需要输入这个密钥密码(不是服务器密码)。
如果追求便利性:直接按回车留空。这样连接服务器时完全不需要输入任何密码,一步到位。但你要确保你的电脑足够安全,不会被别人接触到。
我个人的做法是,个人电脑不设置密钥密码,因为我的电脑只有我自己用;但在其它地方登录会设置密码,毕竟安全第一。
如果你选择设置密码,输入后会要求你再输入一次确认:
Enter same passphrase again:密钥生成完成
设置好后,你会看到类似这样的输出:
Your identification has been saved in /home/username/.ssh/id_rsa
Your public key has been saved in /home/username/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx zhangsan@gmail.com
The key's randomart image is:
+---[RSA 4096]----+
| .o+*B=. |
| +=*=+. |
| ..o.Bo . |
+----[SHA256]-----+恭喜!你的 SSH 密钥对已经生成好了。在密钥保存位置会有两个文件:
id_rsa:这是你的私钥,千万不能泄露给任何人
id_rsa.pub:这是公钥,等会要上传到 VPS 服务器的就是这个文件
查看和获取公钥内容
现在我们需要查看公钥的内容,因为下一步要把它上传到 VPS。在终端输入:
cat ~/.ssh/id_rsa.pub你会看到一长串文字,类似这样:
ssh-rsa AAAAB3...很长很长的字符串...xxxxx zhangsan@gmail.com这就是你的公钥内容。它以 ssh-rsa 开头,中间是一大串加密字符,最后是你设置的注释。
重要提示:复制这段内容时,要从 ssh-rsa 开头一直复制到注释结尾,必须完整复制,一个字符都不能少。我建议你先把它复制到记事本里保存一下,下一步上传公钥时会用到。
私钥安全提醒
再强调一遍:私钥文件(id_rsa)绝对不能给任何人,也不要上传到任何地方。你的 VPS 安全就靠它了,泄露了私钥就等于把家门钥匙交给了别人。
只有公钥(id_rsa.pub)才需要上传到服务器,这个是专门用来公开的,不用担心安全问题。现在密钥已经生成好了,下一步我们就把公钥上传到 VPS 服务器上。
4.上传密钥到 VPS
4.1上传公钥到 VPS
SSH 密钥对生成完成后,我们需要将公钥上传到 VPS。这个过程就像是把锁安装到服务器上,只有你手中的钥匙才能打开。
方法一:使用 ssh-copy-id 命令
如果你使用的是 Linux 或 Mac,且可以使用密码登录 VPS,ssh-copy-id 命令是最简单的方式。只需运行以下命令:
ssh-copy-id 用户名@VPS_IP
例如:
ssh-copy-id root@192.168.1.100
如果你使用的是非默认端口,记得加上 -p 参数指定端口:
ssh-copy-id -p 端口号 用户名@VPS_IP
系统会提示你输入一次密码,验证通过后,公钥就会自动上传到 VPS。
方法二:手动上传
如果你不使用 ssh-copy-id 或者是 Windows 用户,可以选择手动上传公钥。
首先,查看并复制公钥内容:
cat ~/.ssh/id_rsa.pub
登录到 VPS 后,检查是否有 .ssh 目录,如果没有,创建一个并设置权限:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
然后,把公钥内容写入 ~/.ssh/authorized_keys 文件:
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
4.2禁用密码登录,进一步提高安全性
现在,你已经可以通过 SSH 密钥连接 VPS,但默认情况下,服务器仍然允许密码登录,这样还是有被暴力破解的风险。
禁用密码登录
进入 VPS,编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config
找到以下配置项:
#PasswordAuthentication yes
将它改为:
PasswordAuthentication no
然后,重启 SSH 服务使配置生效:
sudo systemctl restart sshd
5.测试新配置
测试时,确保你有一个正常的 SSH 连接保持在线,使用另一个终端测试通过 SSH 密钥登录。成功后,密码登录就被彻底禁用,系统会提示“Permission denied”(权限拒绝)。
6.总结
至此,我们已经完成了 SSH 密钥免密登录的配置。通过 SSH 密钥登录,不仅提高了 VPS 的安全性,还让日常操作变得更加方便。无论你是 Linux、Mac 还是 Windows 用户,按照教程操作,你都能轻松搞定。另外,禁用密码登录后,VPS 的安全性会更高,防止暴力破解。配置好后,你可以安心地管理你的 VPS,免去输入密码的烦恼。希望这篇教程能帮你解决 VPS 登录的安全问题,提升运维效率。
评论区