轻松部署 Laravel 应用 | 《12. 安全加固 - 使用密钥登录》
:clap: 本系列持续更新中,欢迎关注:https://github.com/wi1dcard/laravel-deploy...。
由于课程上下文关联比较紧密,在开始前请先阅读 本文。
你的支持是我写作的动力;关注我的客官们,请在右上角点个赞,将会让文章在首页展示,帮助更多人。
感谢 :clap: !
上一小节中,我们为服务器创建了新用户,并禁止了根用户直接登录。本节将进一步完善安全加固,同时避免每次登录都需要输入密码的麻烦。
所谓密钥登录,即 在本地生成密钥对(一套公钥 + 私钥称为「密钥对」)后,将公钥 传输到服务器中;随后进行 SSH 登录时,本地使用私钥加密一字符串,若服务端使用公钥解密成功,则认为客户端可信。
提示:关于非对称加密和 RSA 相关知识,可参见 本文。
在本地生成密钥对
在本地执行以下命令:
$ ssh-keygen -t rsa -C "wi1dcard.cn@gmail.com"
其中,-t rsa
表示密钥类型为 RSA,wi1dcard.cn@gmail.com
请替换为自己的邮箱地址。
接下来你将会收到连续几条询问提示:
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
意为:使用哪个文件保存私钥(默认为 /root/.ssh/id_rsa
)?不同系统、不同用户的默认值均不同,通常情况下为 ~/.ssh/id_rsa
(~
是 Bash 中的特殊字符之一,表示用户根目录)。
直接按下回车键,使用默认值即可。
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
意为:私钥密码想设置成什么?我们暂时无需加密,回车继续即可。
Enter same passphrase again:
意为:请再次输入密码确认;依旧回车继续即可。
稍等片刻,密钥对就生成好了:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:TwgRw0ZIHo1UqzGgLrAuKkjZaLxdkmcHRxbAuyDNiow wi1dcard.cn@gmail.com
The key's randomart image is:
...
以上提示我们只需关注前两行:
/root/.ssh/id_rsa
是私钥路径。/root/.ssh/id_rsa.pub
是公钥路径。
你可以使用 cat
命令来查看它们,例如:
$ cat /root/.ssh/id_rsa.pub
你将会看到公钥文本展示在命令行中。
cat
命令与 PHP 的 file_get_contents
+ echo
作用类似 —— 读取文件并完整地输出。
传输公钥到服务器
接下来,我们需要将公钥传输到服务器上。十分简单,一行命令即可:
$ ssh-copy-id deployer@laravel-deployment.wi1dcard.cn
请将 laravel-deployment.wi1dcard.cn
替换为你的服务器公网 IP 或域名,并使用新用户(deployer
),而非根用户。
在这期间,需要你输入上一节设置的密码:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/jootu/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
deployer@laravel-deployment.wi1dcard.cn's password: <输入密码>
恭喜,传输成功:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'deployer@laravel-deployment.wi1dcard.cn'"
and check to make sure that only the key(s) you wanted were added.
阅读以上输出,已提示我们可以使用 ssh 'deployer@laravel-deployment.wi1dcard.cn'
登录到服务器,亲自试试看吧。
禁止使用密码登录
成功地「免密码」登录服务器后,我们需要确保密码登录被禁用。与上一节类似,修改 SSH 服务配置文件 /etc/ssh/sshd_config
:
$ su root # 切换至 root 用户身份
$ sed -i -E 's/#?\s*(PermitEmptyPasswords)(.*)$/\1 no/' /etc/ssh/sshd_config
$ sed -i -E 's/#?\s*(PasswordAuthentication)(.*)$/\1 no/' /etc/ssh/sshd_config
注意:再次建议使用 Vim 等编辑器手动编辑。
以上命令将会变更两个配置项,它们的值均被修改为 no
,也就是不允许。
PermitEmptyPasswords no
用于禁止空密码登录。若创建用户时未使用passwd
设置密码,且此处为yes
将会非常危险;因此,无论是否使用密钥登录,强烈建议将该配置项设置为no
。PasswordAuthentication no
用于禁止密码授权(即密码登录)。
安全警告
务必!务必!确保你的私钥无法被除自己之外的任何人读取,否则将会泄露 几乎所有 基于 SSH 协议的通讯权限,包括但不限于 Git Push、SSH 登录服务器等。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: