EP119. “SSH Key 免密登录与自动化推送收尾”
🔒 登录后可标记已读配置 SSH Key,实现「以后登录服务器命令行、执行 git push 都不用再手动输密码」——本机生成一对密钥(私钥留在本机绝不外传,公钥交给服务器),服务器把这个公钥记录在 ~/.ssh/authorized_keys 文件里,之后服务器就能靠这对密钥自动识别「这是我认识的电脑」。这是整套 Git 自动部署工作流的最后一块拼图,做完之后,日常更新网站就只是「改代码 → git add → git commit → git push」,全程不用输密码,也是这一整个部署章节的收尾。
涉及文件
~/.ssh/id_ed25519/~/.ssh/id_ed25519.pub(本机新建,SSH 密钥对)~/.ssh/authorized_keys(线上服务器新建,登记信任的公钥)
代码实现
(本机操作)检查是否已有 SSH Key:
cd ~
cd .ssh
ls
# 如果提示找不到目录,说明还没有 key,需要新建
# 如果已有 id_ed25519 和 id_ed25519.pub 这一对文件,说明已经有 key 了
(本机操作)如果没有,生成一对新的 SSH Key:
cd ~
ssh-keygen -t ed25519 -C "你的邮箱@example.com"
# 按提示:
# - 保存路径直接回车,用默认位置(~/.ssh/)
# - 是否覆盖已有文件:视情况选 yes/no
# - 是否设置密码短语(passphrase):个人电脑通常直接留空回车两次即可
(本机操作)查看公钥内容并复制:
cd ~/.ssh
cat id_ed25519.pub
# 输出的这一整行文本就是公钥,复制到剪贴板
(线上服务器,SSH 登录后操作)新建 .ssh 目录和 authorized_keys 文件,粘贴公钥:
cd ~
mkdir .ssh
cd .ssh
touch authorized_keys
nano authorized_keys
# 把本机复制的公钥内容粘贴进去,Ctrl+X → Y → Enter 保存
# 收紧目录和文件权限,确保同一台共享主机上的其他用户完全无法访问
cd ~
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
验证免密登录已生效:
ssh 你的SSH用户名@你的域名
# 不再提示输入密码,直接登录成功
# 免密的 git push 也一样:
git push live master
# 不再提示输入密码
关键改动点:
id_ed25519(不带后缀)是私钥,只能留在自己电脑上,绝不能泄露给任何人或上传到任何地方;id_ed25519.pub(带.pub后缀)是公钥,可以放心分享给要信任你的服务(DreamHost、GitHub、GitLab 等),这一讲只需要cat出.pub文件的内容ed25519是密钥算法类型,是目前推荐使用的现代算法(比更早的 RSA 更短、更安全)- 服务器端认公钥的方式很直接:只要
~/.ssh/authorized_keys文件里存在你的公钥内容,之后你用对应的私钥连接时就会被自动信任,不用再输入密码 chmod 700 .ssh/chmod 600 .ssh/authorized_keys是 SSH 机制本身的硬性要求——权限设置过于宽松(比如同一台共享主机上别的用户也能读写这些文件)的话,SSH 服务会直接拒绝使用这套密钥认证,出于安全考虑必须收紧到只有自己能访问- 免密登录不仅让手动 SSH 登录更方便,更重要的是让
git push也不用每次都停下来手动输密码——这才是把整个「改代码 → 提交 → 推送上线」流程打磨成丝滑自动化工作流的关键一步 - 如果多个开发者需要共同推送到同一个线上仓库,只需要把每个人各自的公钥都追加进服务器的
authorized_keys文件里(一行一个),不需要大家共用同一套账号密码
常见坑
- 已经有 SSH Key 却又重新生成并覆盖——如果这对密钥还在被别的服务(比如 GitHub)使用,覆盖后旧服务那边记录的公钥就会失效,需要重新去对应服务更新一份新公钥
- 把私钥内容(不带
.pub的那个文件)粘贴到服务器的authorized_keys里——应该粘贴的是公钥(.pub结尾的文件)内容,私钥永远只留在本机 authorized_keys或.ssh目录权限设置得太宽松——SSH 服务出于安全考虑会直接拒绝这类权限过松的密钥文件,登录会继续要求输入密码而不是报出明确的权限错误提示,容易让人摸不着头脑
Sources
Udemy:
- Become a WordPress Developer: Unlocking Power With Code — Section 21, EP119