SSH 访问 KapsuleHost 站点仅支持基于密钥的方式,因此在打开 shell 或 SFTP 会话之前,您需要先在 KPanel 中为该站点注册一个公钥。本指南将介绍该功能的位置、如何添加您已有的密钥、如何让 KapsuleHost 为您生成密钥,以及如何撤销您不再信任的密钥。
SSH 密钥页面在哪里
打开 网站,点击对应站点,然后在站点左侧菜单中打开 设置 组,选择 SSH 密钥。该页面标题为 SSH 访问,其中包含两项内容:该站点的连接详情,以及当前已获授权使用这些连接信息的公钥列表。
主侧边栏中没有顶层的 SSH 项。密钥是按站点划分的,因此您在此处添加的密钥仅对该站点有效。如果您运营多个站点,即便是笔记本电脑上同一个密钥,每个站点也都需要单独添加一条记录。

添加或撤销密钥需要 sites:write 权限。如果您使用的是只读角色的团队账户,添加密钥 按钮和撤销图标将被隐藏。请联系账户所有者或管理员进行此项更改。
连接详情
页面顶部的 连接详情 卡片显示了您的客户端所需的全部信息:
| 字段 | 说明 |
|---|---|
| Host | 要连接的主机名 |
| Port | 该站点的 SSH 端口 |
| Username | 您的站点运行所使用的系统用户 |
| SSH | 针对该站点生成的现成 ssh 命令 |
| SFTP | 针对该站点生成的现成 sftp 命令 |
每一行都带有复制控件,SSH 和 SFTP 行复制的是整条命令而非单个值,因此您可以直接粘贴到终端中使用。建议使用这两个命令,而不是自行输入,因为其中已经包含了正确的用户、主机和端口。
如果该卡片根本没有出现,说明站点的 shell 用户尚未完成配置。此时 API 会返回简单的 站点没有 SSH 用户 错误。请等待站点状态标签显示为 Active 后再重新加载页面。
添加您已有的密钥
大多数用户的计算机上已经拥有一对密钥,这里只需添加其中的公钥部分。
- 在您自己的电脑上,打印出您的公钥。在 macOS 和 Linux 上,通常使用
cat ~/.ssh/id_ed25519.pub,若是较旧的 RSA 密钥则使用cat ~/.ssh/id_rsa.pub。在使用 OpenSSH 的 Windows 系统上,则使用type %USERPROFILE%\.ssh\id_ed25519.pub。 - 复制整行内容,该行以
ssh-ed25519、ssh-rsa或ecdsa-sha2-nistp256开头。 - 在 KPanel 中,点击 添加密钥。
- 在 Label 字段中填入便于记忆的名称,例如该密钥所在设备的名称。
- 将公钥粘贴到第二个字段中。
- 点击 添加密钥。
该密钥会立即出现在 Authorised keys 列表中,标签下方附有其指纹信息。您可以立即进行连接。
每次添加密钥时,KapsuleHost 也会向账户邮箱发送邮件,其中注明了标签、指纹和站点信息。这封邮件是有意为之:SSH 访问属于高信任操作,如果出现了您未曾添加的密钥,请立即将其撤销并更改密码。
请务必只粘贴 .pub 文件的内容。私钥文件没有 .pub 扩展名,并以类似 -----BEGIN OPENSSH PRIVATE KEY----- 的行开头。如果您粘贴的是这样的内容,那就是您的私钥,必须重新生成而不能继续使用。
如果您还没有密钥
请在本地使用 ssh-keygen -t ed25519 -C "your-label" 生成一个密钥,接受默认的文件位置,并在提示时设置密码短语。该命令会生成 ~/.ssh/id_ed25519(请妥善保密)和 ~/.ssh/id_ed25519.pub(粘贴这一个)。
让 KapsuleHost 生成密钥对
如果您不想自行运行 ssh-keygen,KPanel 也可以为您生成这对密钥。
- 点击 添加密钥。
- 填写 Label 字段。公钥输入框留空。
- 点击 生成密钥对。
KapsuleHost 会创建一对 Ed25519 密钥,将公钥部分安装到该站点,并显示一条绿色横幅:密钥对已生成:立即下载私钥。点击 下载 .pem 即可保存私钥。该文件将以您所填写的标签命名。
私钥仅显示一次,仅此一次。横幅已明确说明:这是您唯一能够下载它的机会。KapsuleHost 不会保留副本供您日后获取。如果您在未下载的情况下关闭了该横幅,请撤销该密钥并重新生成一对新密钥。
自动生成的密钥不带密码短语,这正是它可以在脚本中使用而无需交互提示的原因。但这也意味着该文件本身就是全部凭证。如果您希望设置密码短语,请改用 ssh-keygen 自行生成密钥对,然后粘贴公钥部分。
下载完成后,请将该文件移动到合适的位置,并收紧其访问权限,因为 SSH 会拒绝使用任何人都可读取的私钥:
mv ~/Downloads/my-laptop_id_ed25519.pem ~/.ssh/kapsule-mysite.pem
chmod 600 ~/.ssh/kapsule-mysite.pem
ssh -i ~/.ssh/kapsule-mysite.pem <username>@<host> -p <port>
请将其中的用户名、主机和端口替换为 连接详情 卡片中显示的实际信息。
读懂已授权密钥列表
Authorised keys 中的每一行都会显示:
- 您为该密钥设置的标签。
- 密钥指纹,当多个标签相似时可用其区分不同的密钥。
- Added,显示该密钥的注册日期。
- 上次使用,显示最近一次认证的日期;若尚未使用过认证,则显示 从未使用。
在清理密钥时,上次使用 这一列最为有用。从未使用过,或数月未使用的密钥,通常对应已更换的笔记本电脑,或已经离职的合作方人员。
撤销密钥
点击该密钥所在行的红色垃圾桶图标。KPanel 会弹出确认提示 撤销 SSH 密钥?,并提示该密钥撤销后将无法再对该站点进行认证。点击 撤销 完成操作。
撤销操作对新建立的连接立即生效。已经打开的 SSH 会话不会因撤销密钥而被强制终止,因此,如果您正在移除某人的访问权限,而对方可能仍处于连接状态,请在撤销密钥后,立即更改其可能已经获取的任何信息:数据库密码、应用程序密钥,以及站点上存储的任何令牌。
请保持密钥列表简洁。每台设备一个密钥,并以设备名称作为标签,这比一堆名为"key1""new key""temp"的密钥要容易审计得多。
故障排查
Permission denied (publickey)。 最常见的原因是您的客户端提供的密钥与您注册的密钥不一致。请使用 ssh -i /path/to/private_key ... 强制指定正确的密钥,或使用 ssh -v 查看当前正在提供哪些密钥。
连接被拒绝或超时。 请确认您使用的是 连接详情 中显示的端口,而非默认的 22 端口。建议直接从页面复制 SSH 命令,而非手动输入。
私钥权限不正确。 OpenSSH 会拒绝使用其他用户可读的私钥。请对该文件运行 chmod 600。
该密钥可用于 SSH 但无法用于 SFTP。 两者使用相同的凭证,因此这种情况几乎总是客户端问题而非密钥本身的问题。请使用从页面复制的 SFTP 命令,其中已包含正确的端口。
后续阅读
- 使用 SFTP 上传文件 介绍了与此相同凭证相关的文件传输方式。
- 通过 SSH 隧道连接数据库 将使用您刚刚添加的密钥,从桌面客户端连接到 MySQL。
- 站点活动日志 记录了您添加的每一个密钥,方便您日后查看谁在何时添加了哪些密钥。