WP DEVELOP

EP119. “SSH Key 免密登录与自动化推送收尾”

首页 WordPress 开发课程 网站上线部署 · EP119
约 6 分钟· #EP119#网站上线部署
🔒 登录后可标记已读

配置 SSH Key,实现「以后登录服务器命令行、执行 git push 都不用再手动输密码」——本机生成一对密钥(私钥留在本机绝不外传,公钥交给服务器),服务器把这个公钥记录在 ~/.ssh/authorized_keys 文件里,之后服务器就能靠这对密钥自动识别「这是我认识的电脑」。这是整套 Git 自动部署工作流的最后一块拼图,做完之后,日常更新网站就只是「改代码 → git addgit commitgit 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