Mac 免密码连接与部署 WZ ETF 博客

给 Mac 上的本人或 Codex:请先完整阅读本文,再配置 SSH 或部署。首次安装 Mac 公钥时需要输入一次服务器密码;此后日常连接和部署不再需要密码。

服务器信息与安全边界

  • 博客域名:https://wzetf.cn
  • 唯一允许操作的服务器:47.102.143.59
  • SSH 用户:blogadmin
  • SSH 别名:wzetf-blog
  • 网站目录:/var/www/quarto-site
  • 已验证的服务器 ED25519 主机指纹:SHA256:92QH+XI3z0g+x8Z5SA8zooabbJ97exRiKvJB8Y2BtzY
  • 不要操作另一台 ETF App 服务器:43.161.227.156
  • 不要在服务器安装 Quarto、Ghost、Node.js 或 MySQL。
  • Quarto 在 Mac 本地渲染,服务器只通过 Nginx 提供 _site 静态文件。

一、在 Mac 上创建独立密钥

打开“终端”,执行:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/wzetf_blog_ed25519 -C "wzetf-blog-mac"

出现密钥口令提示时,如果希望以后完全自动部署,连续按两次 Enter,使用空口令。

不要把私钥 ~/.ssh/wzetf_blog_ed25519 发给任何人,也不要上传到 OneDrive、GitHub 或博客目录。

二、把 Mac 公钥安装到服务器

执行:

cat ~/.ssh/wzetf_blog_ed25519.pub | ssh blogadmin@47.102.143.59 'umask 077; mkdir -p ~/.ssh; touch ~/.ssh/authorized_keys; cat >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys'

首次连接会显示服务器指纹。只有当 ED25519 指纹与下面完全一致时,才输入 yes

SHA256:92QH+XI3z0g+x8Z5SA8zooabbJ97exRiKvJB8Y2BtzY

随后输入一次 blogadmin 的服务器密码。输入密码时终端不会显示字符,这是正常现象。

三、配置 SSH 别名

执行:

nano ~/.ssh/config

保留文件中已有内容,在末尾加入:

Host wzetf-blog
    HostName 47.102.143.59
    User blogadmin
    Port 22
    IdentityFile ~/.ssh/wzetf_blog_ed25519
    IdentitiesOnly yes
    StrictHostKeyChecking yes
    ServerAliveInterval 60
    ServerAliveCountMax 3

Control + O 保存,按 Enter 确认,再按 Control + X 退出。然后执行:

chmod 600 ~/.ssh/config

四、验证免密码连接

执行:

ssh -o BatchMode=yes wzetf-blog 'printf "USER=%s\nHOST=%s\n" "$(whoami)" "$(hostname)"; test -w /var/www/quarto-site && echo SITE_WRITABLE=yes'

正确结果应包含:

USER=blogadmin
HOST=iZuf6giekp8l32s44zcgwdZ
SITE_WRITABLE=yes

如果命令要求密码或显示 Permission denied,不要部署,先检查密钥与 ~/.ssh/config

五、准备 Mac 的部署工具

本项目已有 deploy.ps1,它会在本地渲染、检查 SSH、上传网站,并保留服务器的 .well-known 证书验证目录。

先检查:

quarto check
pwsh --version

如果缺少 Quarto 或 PowerShell 7,并且已经安装 Homebrew,可执行:

brew install --cask quarto
brew install --cask powershell

安装后关闭并重新打开终端,再次运行检查命令。

六、部署前演练

在终端进入博客项目根目录。该目录必须包含 _quarto.ymldeploy.ps1

执行:

pwsh -File ./deploy.ps1 -DryRun

预期最后显示“演练完成,没有修改服务器”。如果演练失败,不要执行正式部署。

七、正式上传

确认本地预览内容无误后执行:

pwsh -File ./deploy.ps1

成功时会显示:

DEPLOY_OK
部署成功。

然后打开:

  • https://wzetf.cn/
  • https://www.wzetf.cn/

如果浏览器仍显示旧内容,使用 Command + Shift + R 强制刷新。

日常工作顺序

  1. 修改 .qmd_quarto.ymlstyles.css 源文件。
  2. 本地运行 quarto preview 检查页面。
  3. 运行 pwsh -File ./deploy.ps1 -DryRun
  4. 明确确认要发布后,再运行 pwsh -File ./deploy.ps1
  5. 打开 HTTPS 网站核对结果。

不要直接修改 _site 内的 HTML,因为下次 Quarto 渲染会覆盖它们。日常部署不需要手动登录服务器,也不需要 sudo 密码;只有修改 Nginx、安装服务器软件或调整系统服务时才需要 sudo