WindTerm ssh 连接服务器流程记录.md
# WindTerm ssh 连接服务器流程记录
WindTerm 是一个开源免费的SSH工具,若没有使用XShell,可尝试该工具
> github地址:https://github.com/kingToolbox/WindTerm
流程:
```
个人电脑生成密钥对
→ 私钥留在个人电脑
→ 只把公钥写入 VPS
→ WindTerm 使用私钥登录
```
## 一、使用密码登录 VPS
打开 WindTerm,新建 SSH 会话:
```
协议:SSH
主机:VPS 公网 IP
端口:22
用户名:你的 VPS 账号,例如 root
```
点击连接,首次连接时确认主机指纹,然后输入 VPS 密码
成功后会看到类似:
```
root@server:~#
```
先不要关闭这个会话,后面需要用它写入公钥
## 二、在个人电脑生成 SSH 密钥
在 Windows 中打开 PowerShell,执行:
```powershell
ssh-keygen -t ed25519 -a 64 -C "personal-vps"
```
>各参数含义如下:
>
>| 参数 | 作用 |
>| ------------------- | ------------------------------------------------------------ |
>| `ssh-keygen` | SSH 密钥生成工具。 |
>| `-t ed25519` | 指定密钥算法为 **Ed25519**(推荐,速度快、安全性高、密钥更短)。 |
>| `-a 64` | KDF(密钥派生函数)迭代次数为 **64**,提高私钥口令的破解难度,增强安全性。 |
>| `-C "personal-vps"` | 为公钥添加注释(Comment),方便识别该密钥用途,不影响认证。 |
>
执行后通常会依次询问:
保存位置:
```
Enter file in which to save the key
```
使用默认路径,直接按 Enter:
```
C:\Users\你的用户名\.ssh\id_ed25519
```
> 若出现:
>
> ```
> C:\Users\你的用户名\.ssh\id_ed25519 already exists.
> Overwrite (y/n)?
> ```
>
> **一个 `.ssh` 目录可以存放多个 SSH 密钥对**,只是**默认文件名**只有一个 `id_ed25519`,表示当前已经存在一个默认名称的 Ed25519 密钥
>
> 推荐做法:每个用途对应一个密钥
>
> 例如:
>
> ```
> C:\Users\用户名\.ssh\
> ├── id_ed25519 # 默认密钥
> ├── id_ed25519.pub
> ├── github-personal # GitHub 个人账号
> ├── github-personal.pub
> ├── ovh-vps # OVH VPS
> ├── ovh-vps.pub
> └── config
> ```
>
> 这种方式最清晰,也便于后续管理
>
> ==在提示时不要直接回车,而是输入新的文件名,例如:==
>
> ```
>Enter file in which to save the key:
> C:\Users\用户名\.ssh\文件名
> ```
>
随后提示:
```
Enter passphrase
```
建议为私钥设置一个独立口令。该口令用于保护个人电脑上的私钥,即使私钥文件被复制,对方仍不能直接使用。
设置完成后提示秘钥放置位置,如:
```
Your public key has been saved in C:\Users\用户名/.ssh/vps_ed25519.pub
```
打开该文件夹存在下述两个文件:
```
vps_ed25519 私钥,只能保存在个人电脑
vps_ed25519.pub 公钥,可以上传到 VPS
```
注意:`.pub` 文件是公钥;没有 `.pub` 后缀的文件是私钥,不能发送给别人,也不能上传到 VPS。
## 三、查看并复制公钥
在 Windows PowerShell 中执行:
> 将 【vps_ed25519】替换为实际生成的公钥名
```
Get-Content "$env:USERPROFILE\.ssh\【vps_ed25519】.pub"
```
会输出一整行内容,例如:
```
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... personal-vps
```
完整复制这一行,不要换行,也不要漏掉开头的 `ssh-ed25519`。
## 四、把公钥写入 VPS
回到之前已经通过密码登录的 WindTerm 窗口。
### 1. 确认当前用户
执行:
```
whoami
```
公钥必须写入你以后准备登录的用户目录。
例如:
- 使用 `root` 登录,公钥写入位置 `/root/.ssh/authorized_keys`
- 使用 `ubuntu` 登录,公钥写入位置 `/home/ubuntu/.ssh/authorized_keys`
### 2. 创建 SSH 配置目录
执行:
```
mkdir -p ~/.ssh
chmod 700 ~/.ssh
```
### 3. 写入公钥
执行:
```
vi ~/.ssh/authorized_keys
```
将刚才复制的一整行公钥粘贴进去
### 4. 修正文件权限
执行:
```
chmod 600 ~/.ssh/authorized_keys
```
### 5. 检查公钥是否写入
执行:
```
cat ~/.ssh/authorized_keys
```
确认里面存在完整的一行:
```
ssh-ed25519 AAAA... personal-vps
```
并且于 powershell 中生成的公钥一致
## 五、在 WindTerm 中配置私钥
不要关闭当前通过密码登录的会话。
在 WindTerm 中复制或编辑 VPS 会话,填写:

```
用户名:写入公钥的 VPS 用户(root/其它用户)
```
然后在会话的 SSH 身份验证设置中:
- 选择“公钥”或“Public Key”认证。
- 私钥文件选择:
```
C:\Users\你的用户名\.ssh\vps_ed25519
```
如果使用默认文件名,则选择:
```
C:\Users\你的用户名\.ssh\id_ed25519
```
- 如果生成密钥时设置了口令,连接时输入的是**私钥口令**,不再是 VPS 用户密码。
- 保存会话。
不同 WindTerm 版本的选项名称可能略有差异,一般位于:
```
会话设置
→ SSH
→ 身份验证
→ 公钥
→ 私钥文件
```
注意不要选择 `.pub` 文件。WindTerm 需要使用的是没有 `.pub` 后缀的私钥文件。
## 特殊情况:WindTerm 无法选择 onekey

点击设置(上图右侧红框所框住的icon),进行添加即可

添加后继续第五步即可
## 六、测试密钥登录
保持原来的密码登录窗口不要关闭(避免连接不上),另外新开一个 WindTerm 标签页,连接刚配置的会话。
成功时:
- 不再要求输入 VPS 账号密码;
- 如果私钥设置了口令,会要求输入私钥口令;
- 最终出现服务器终端提示符。
登录后执行:
```
whoami
```
确认当前用户正确。
建议再测试一次:
1. 主动退出新会话:
```
exit
```
- 重新双击 WindTerm 中保存的会话。
- 确认仍能通过私钥登录。
至少成功测试两次,才能考虑关闭密码登录。
## 七、可选:关闭 SSH 密码登录
这是安全加固步骤,不要在密钥尚未验证成功时操作!!!
首先查看 SSH 实际配置:
```bash
sudo sshd -T | grep -Ei 'passwordauthentication|pubkeyauthentication|permitrootlogin'
```
默认情况返回:
```text
# 允许 root 用户登录
PermitRootLogin yes
# 启用公钥认证
PubkeyAuthentication yes
# 启用密码认证
PasswordAuthentication yes
```
SSH 配置文件通常是:
```text
/etc/ssh/sshd_config
```
不过部分系统还会读取:
```text
/etc/ssh/sshd_config.d/*.conf
```
不同系统的配置结构不同。修改前建议先备份:
```bash
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
```
编辑配置:
```bash
sudo vi /etc/ssh/sshd_config
```
设置或修改:
```text
# 启用公钥认证
PubkeyAuthentication yes
# 禁用密码认证
PasswordAuthentication no
```
### 配置未生效?
若修改后执行:
```bash
sudo sshd -T | grep -Ei 'passwordauthentication|pubkeyauthentication|permitrootlogin'
```
仍显示:
```text
PasswordAuthentication yes
```
则可能是 `/etc/ssh/sshd_config.d/*.conf` 中的配置覆盖了主配置文件。
排查所有相关配置:
```bash
sudo grep -RniE '^[[:space:]]*(PasswordAuthentication|PubkeyAuthentication|PermitRootLogin)' \
/etc/ssh/sshd_config /etc/ssh/sshd_config.d/
```
找到设置为 `PasswordAuthentication yes` 的配置文件后,将其修改为:
```text
PasswordAuthentication no
```
随后验证配置:
```bash
sudo sshd -t
```
无输出表示配置正确,然后重新加载 SSH 服务:
```bash
sudo systemctl reload ssh
```
若提示服务不存在,可先查看服务名称:
```bash
systemctl status ssh
```
部分发行版服务名为:
```bash
sudo systemctl reload sshd
```
再次确认最终生效配置:
```bash
sudo sshd -T | grep -Ei 'passwordauthentication|pubkeyauthentication|permitrootlogin'
```
应看到:
```text
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication no
```
### 误修改恢复
可通过备份文件恢复:
```bash
sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config
```
### vi 快速定位
快速定位到 `PasswordAuthentication`:
按 `Esc` 后输入:
```vim
/PasswordAuthentication
```
按 **Enter** 开始搜索,可使用下面的常用快捷键:
| 操作 | 命令 |
| ---------- | --------- |
| 向下查找 | `/关键字` |
| 向上查找 | `?关键字` |
| 下一个匹配 | `n` |
| 上一个匹配 | `N` |
> 不要立刻关闭当前 SSH 会话。重新打开一个 WindTerm(或其他 SSH 客户端)窗口,确认可以通过密钥正常登录后,再关闭旧会话,避免因配置错误导致无法重新连接服务器
## 八、后续日常登录
以后登录流程是:
```
打开 WindTerm
→ 双击已保存的 VPS 会话
→ WindTerm 读取本机私钥
→ 必要时输入私钥口令
→ VPS 使用 authorized_keys 中的公钥验证
→ 登录成功
```
文件应分别存放:
| 文件 | 存放位置 | 是否可以公开 |
| ---------------------- | -------------- | ------------------ |
| 私钥 `vps_ed25519` | 个人电脑 | 不可以 |
| 公钥 `vps_ed25519.pub` | 个人电脑和 VPS | 可以 |
| `authorized_keys` | VPS | 包含允许登录的公钥 |
还应备份私钥到一个可信的加密介质或密码管理器附件中。若个人电脑损坏且私钥没有备份,同时密码登录已经关闭,就只能通过云厂商控制台恢复访问