Scert/doc/SSH密钥配置指南.md

6.8 KiB
Raw Blame History

SSH 密钥配置指南

本文用于帮助不熟悉 SSH 的用户完成 Scert 远程服务器部署配置。Scert 只使用 SSH 密钥认证,不保存或使用远程服务器登录密码。本机为每台主机、每次配置生成随机密钥文件名,最终公钥路径为 /ssl/ssh/<用户名>+scert-<随机标识>,不保留 .pub 后缀。

一、配置流程

SSH 配置分为三步:

  1. 在自己的电脑上生成一对 SSH 密钥。
  2. 将公钥安装到远程服务器的授权文件中。
  3. 将本机私钥录入 Scert,Scert 会在保存时加密存储。

密钥分为两部分:

  • 私钥:只保存在自己的电脑或 Scert 的加密敏感信息存储中,不能发送给他人,不能提交到 Git。
  • 公钥:可以安装到远程服务器,用于验证私钥对应的客户端。

二、Windows 生成密钥

Windows 10、Windows 11 和较新的 Windows Server 通常已经包含 OpenSSH 客户端。打开 PowerShell,复制并执行:

ssh-keygen -t ed25519 -C "scert-deploy" -f "$HOME\.ssh\scert_deploy_ed25519"

执行过程中:

  1. 如果提示创建目录,输入 Y 或按回车确认。
  2. 如果提示输入私钥口令,可以设置一个口令;如果希望配置更简单,也可以直接按两次回车留空。
  3. 私钥默认保存为:%USERPROFILE%\.ssh\scert_deploy_ed25519。
  4. 公钥默认保存为:%USERPROFILE%\.ssh\scert_deploy_ed25519.pub。

查看公钥内容:

Get-Content "$HOME\.ssh\scert_deploy_ed25519.pub"

复制公钥内容时,要从 ssh-ed25519 开始复制到末尾的注释,必须保持为一整行。

三、Linux 或 macOS 生成密钥

打开终端,复制并执行:

ssh-keygen -t ed25519 -C "scert-deploy" -f ~/.ssh/scert_deploy_ed25519

查看公钥内容:

cat ~/.ssh/scert_deploy_ed25519.pub

默认文件位置:

  • 私钥:~/.ssh/scert_deploy_ed25519
  • 公钥:~/.ssh/scert_deploy_ed25519.pub

建议设置本地私钥权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/scert_deploy_ed25519
chmod 644 ~/.ssh/scert_deploy_ed25519.pub

四、把公钥安装到 Linux 服务器

如果本机安装了 ssh-copy-id,可以执行:

ssh-copy-id -i ~/.ssh/scert_deploy_ed25519.pub 用户名@服务器地址

命令会要求输入一次服务器登录密码。密码只用于把公钥安装到服务器,不会提交给 Scert。

如果没有 ssh-copy-id,先查看公钥:

cat ~/.ssh/scert_deploy_ed25519.pub

然后使用服务器控制台或已有登录方式,在远程服务器执行:

umask 077
mkdir -p ~/.ssh
cat >> ~/.ssh/authorized_keys

执行后将公钥整行粘贴进去,按回车,再按 Ctrl+D 结束输入。最后设置权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

如果远程服务器使用的是其他登录用户,必须把公钥放到该用户自己的 ~/.ssh/authorized_keys,不能误放到 root 用户目录。

五、把公钥安装到 Windows OpenSSH 服务器

Windows 服务器需要先确认 OpenSSH Server 已安装并运行。对于普通用户,将公钥追加到该用户的 .ssh\authorized_keys 文件;对于管理员账户,Windows OpenSSH 通常使用系统级管理员授权文件,具体位置以服务器 OpenSSH 配置为准。

建议优先使用服务器管理员提供的 OpenSSH 配置方式,不要直接覆盖已有授权文件。追加公钥时只能新增一行,不能删除其他用户已经配置的公钥。

六、在 Scert 中录入私钥

在 Scert 的服务器配置页面:

  1. 点击“新建或导入”。
  2. 选择自己的操作系统标签,查看对应的密钥生成和公钥安装命令。
  3. 在“私钥名称”中填写容易识别的名称,例如“测试服务器部署密钥”。
  4. 可以直接把私钥内容粘贴到“私钥内容”,也可以点击文件选择框读取本机私钥文件。
  5. 如果生成密钥时设置了口令,在“私钥口令”中填写相同口令;未设置口令时留空。
  6. 确认内容无误后点击“加密保存”。
  7. 返回服务器配置,选择刚刚保存的 SSH 私钥。

Scert 页面显示的本机密钥路径遵循以下规则:

  • 私钥:/ssl/ssh/<用户名>+scert-<随机标识>.key
  • 公钥:/ssl/ssh/<用户名>+scert-<随机标识>

生成命令会先由 ssh-keygen 临时产生 .pub 文件,然后将该文件移动为不带 .pub 后缀的公钥目标文件。每台主机、每次新建配置都会生成新的随机标识;远程服务器仍只需要把公钥内容追加到授权文件。

读取本机私钥文件只会把内容放入当前页面内存,仍需点击“加密保存”才会提交。关闭窗口或刷新页面前,请确认已经完成保存。

七、测试连接前检查

配置服务器时需要填写:

  • 服务器地址和 SSH 端口,默认端口为 22。
  • SSH 用户名。
  • 已加密保存的 SSH 私钥。
  • SSH 主机 SHA256 指纹。
  • 远程证书、完整证书链和私钥路径。

首次连接前,请通过可信的服务器控制台或管理员渠道核对主机指纹。不要为了绕过连接失败而随意删除指纹校验。

测试环境当前包括:

  • 192.168.2.3
  • 192.168.2.4

上述地址仅用于授权测试,不应直接写入生产配置。生产环境应由用户自行填写实际服务器地址,并重新核对主机指纹和远程路径。

八、常见问题

1. 提示权限不足

检查远程用户是否有权读取或替换证书目录,以及是否有权执行 Nginx、Caddy 或 Apache 的重载命令。不要直接给服务账号授予不必要的全盘权限。

2. 提示私钥格式错误

请确认录入的是私钥文件,而不是 .pub 公钥文件。私钥内容通常以 BEGIN 开头;公钥通常以 ssh-ed25519、ssh-rsa 或类似标识开头。

3. 设置了私钥口令但连接失败

检查 Scert 中填写的私钥口令是否与生成密钥时设置的口令完全一致。配置页面允许明文显示口令,便于确认输入;保存后由后端加密存储,接口不返回明文。

4. 不知道怎么操作

最简单的方式是:

  1. 在 Scert 弹窗中复制密钥生成命令。
  2. 在自己的电脑上执行命令。
  3. 将公钥安装命令中的服务器地址和用户名替换为实际值并执行。
  4. 回到 Scert,选择刚生成的私钥文件。
  5. 点击“加密保存”,再配置服务器。

九、安全注意事项

  • 不要把私钥发送给任何人。
  • 不要把私钥、公钥安装密码或 DNS 密钥提交到 Git。
  • 不要把私钥粘贴到远程服务器;远程服务器只需要公钥。
  • 不要覆盖远程服务器已有的 authorized_keys 文件。
  • 服务器地址、端口、用户和主机指纹应按环境分别配置。
  • 测试机的配置不能直接复制到生产环境。