# SSH 密钥登录与安全修改端口

先验证新登录方式，再停用旧方式，是避免把自己锁在服务器外的关键。私钥保存在客户端，公钥放在服务器。

更新日期：2026-09-16

规范地址：https://stock.iftalking.com/guides/ssh-keys/

## 1. 先理解公钥和私钥分别放哪里

公钥可以放到服务器的 `authorized_keys`；私钥留在自己的电脑，并用口令保护。每台电脑单独生成密钥，丢失设备时就能撤销对应公钥，不需要让所有设备共用同一份私钥。

开始前确认现有密码或密钥登录正常，并打开服务商[网页控制台](https://stock.iftalking.com/guides/panel-console/)。保留当前连接，整个过程用第二个终端验证。

![SSH 配置出错时可通过网页控制台进入系统](https://stock.iftalking.com/tutorial-media/provider-shell-launch.jpg)

*图示说明：服务商官方知识库公开截图（旧版界面），用于对照功能名称；当前菜单位置可能调整。图中的套餐、IP、端口和日期仅为示例。*

## 2. 在本机生成 Ed25519 密钥

以下命令在自己的电脑运行。若默认路径已经有密钥，换一个文件名，不能直接覆盖。

```bash
ssh-keygen -t ed25519 -f ~/.ssh/vps_ed25519 -C 'my-laptop'
```

按提示设置私钥口令。生成的 `vps_ed25519.pub` 是公钥，`vps_ed25519` 是私钥。Windows PowerShell 同样可使用 OpenSSH 工具；目录写法按本机路径调整。

## 3. 将公钥添加给实际登录用户

有 `ssh-copy-id` 的电脑可执行下列命令，端口和用户名按实际替换。它通过现有登录方式把公钥加入对应用户，不会替你创建系统账户。

```bash
ssh-copy-id -i ~/.ssh/vps_ed25519.pub -p 22 deploy@203.0.113.10
```

没有该工具时，先通过现有方式登录，在目标用户家目录创建 `.ssh`，把 `.pub` 文件的一整行追加到 `authorized_keys`。不要覆盖已有其他设备的公钥；目录权限通常为 700，文件为 600，所有者必须是该用户。

如果使用 KiwiVM 的 Public SSH Keys 功能，先读面板对作用时机的说明：管理公钥列表、给当前系统注入公钥、重装时使用公钥可能是不同操作，保存列表后仍要实测登录。

## 4. 用第二个窗口确认密钥真的生效

```bash
ssh -i ~/.ssh/vps_ed25519 -o IdentitiesOnly=yes -p 22 deploy@203.0.113.10
```

私钥口令提示与服务器账户密码提示不同。可加 `-v` 确认使用的是 publickey 认证。登录后执行 `sudo -v`，验证新用户有需要的管理权限，再进行下一步。

## 5. 需要禁用密码时，先检查有效配置

在服务器备份 SSH 配置，检查主配置和 `sshd_config.d` 中的片段。常用目标是 `PubkeyAuthentication yes`、`PasswordAuthentication no`；若要完全关闭交互式密码认证，还需结合 PAM 与 `KbdInteractiveAuthentication` 的实际设置。不要在不理解 MFA 配置时一并禁用它。

```bash
sudo sshd -t
sudo sshd -T | grep -E 'pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|permitrootlogin'
```

语法检查无输出且退出成功后，按系统实际服务名 reload SSH。Ubuntu 常见 `ssh`，其他系统可能是 `sshd`；启用 socket activation 的系统还要按发行版说明处理。再次新开连接验证后，才关闭旧窗口。

## 6. 改端口与撤销密钥分别操作

改 SSH 端口只会减少一部分扫描噪声，不能代替密钥和更新。先放行新端口、修改配置、检查语法，再验证新端口，最后撤销旧规则。不要同时改登录账户和防火墙。

设备丢失时，从对应用户的 `authorized_keys` 中删除那一条公钥，再核对其他密钥仍可用。私钥泄露则生成新密钥并撤销旧密钥；仅修改私钥口令不能让已经外泄的副本失效。更多见[账户安全](https://stock.iftalking.com/guides/account-security/)。


## 完成后检查

端口变化不能代替密钥和更新。每次调整都要能通过另一条已验证的途径恢复。

## 参考资料

- [Ubuntu 官方文档](https://ubuntu.com/server/docs/how-to/security/openssh-server/)
- [服务商官方说明](https://bandwagonhost.com/kb.php?action=displayarticle&id=30)
