FinalShellSSH密钥登录:从生成到测通
前言
密码登录省事,但公网 SSH 扫库、撞库很常见。更稳妥的做法是 公钥写在服务器、私钥只留本机,用密钥认证登录。
大致流程: Debian 系统 上生成兼容性好的 RSA PEM 密钥,用 FinalShell 把私钥落到本机并完成连接配置。
铁律(避免把自己锁在门外):
- 改认证相关配置时,始终保留一条已登录的会话,用新连接验证成功后再关旧会话。
- 先密钥测通,确认能进 shell,再考虑改端口、关密码等加固。
约定:
| 项 | 说明 |
|---|---|
| 管理用户 | root(单人自用常见;普通用户同理,路径换成对应用户家目录) |
| 初始端口 | 仍为 22(先把密钥跑通;改端口是后话) |
| 密钥文件名 | id_finalshell_rsa(可自定,全文保持一致即可) |
| 本机私钥路径 | C:\Users\你的用户名\.ssh\id_finalshell_rsa |
原理
SSH 密钥登录是非对称加密:
- 私钥:只放本机,用来向服务器证明「我是密钥持有者」。
- 公钥:写入服务器
~/.ssh/authorized_keys,一行一把。
握手时服务器用公钥校验本机私钥签名,通过即放行,不必再传登录密码(若你给私钥设了口令,客户端会再要一次「私钥密码」,那是另一层保护)。
为何选 RSA + PEM?OpenSSH 新格式、ed25519 都很好,但部分 FinalShell 版本对私钥格式/绑定 UI 不友好。 ssh-keygen -t rsa -b 4096 -m PEM 兼容性最好,私钥文件头多为:
1 | -----BEGIN RSA PRIVATE KEY----- |
或
1 | -----BEGIN PRIVATE KEY----- |
服务器上生成密钥并写入 authorized_keys
用 FinalShell(或任意 SSH 客户端)先用密码连上服务器,在 root shell 执行:
1 | mkdir -p /root/.ssh |
权限含义简要:
| 路径 | 权限 | 原因 |
|---|---|---|
/root/.ssh |
700 |
目录仅 root 可进 |
authorized_keys、私钥 |
600 |
仅本人读写;过松时 sshd 可能直接拒绝密钥 |
多把公钥: 以后给另一台电脑、CI、旧机 rsync 加钥时,一律
>>追加。>会清空原文件,已有的 FinalShell 密钥会被踢掉。
用FinalShell把私钥下载到本机
私钥此时还在服务器上,必须先拷到本机再删服务端副本。
本机准备目录
Windows PowerShell:
1 | New-Item -ItemType Directory -Force -Path $env:USERPROFILE\.ssh | Out-Null |
FinalShell 文件管理下载(推荐)
- 保持当前服务器会话已连接。
- 打开该连接的 文件管理 / SFTP(与终端同主机)。
- 进入目录:
/root/.ssh/ - 找到
id_finalshell_rsa(不要只下.pub;登录用的是私钥)。 - 下载到本机:
C:\Users\你的用户名\.ssh\id_finalshell_rsa- 不要改扩展名、不要多存成
.txt。 - 若系统提示覆盖,确认路径无误再覆盖。
- 不要改扩展名、不要多存成
备选:本机 scp(仍可用密码时)
1 | scp root@你的服务器IP:/root/.ssh/id_finalshell_rsa $env:USERPROFILE\.ssh\id_finalshell_rsa |
下载后本机检查文件存在且非空:
1 | Get-Item $env:USERPROFILE\.ssh\id_finalshell_rsa |
第一行应是 -----BEGIN ... PRIVATE KEY-----。
服务器上删除私钥副本
确认本机私钥已下好、能打开之后,回到服务器 shell:
1 | rm -f /root/.ssh/id_finalshell_rsa |
期望:
- 仍有
authorized_keys(以及可选的.pub,.pub可留可删,不影响登录)。 - 不应再有 可登录用的
id_finalshell_rsa私钥。
公钥已在 authorized_keys 里,登录不依赖服务端再存一份私钥。私钥长期放在服务器上,一旦机器被入侵,攻击者等于拿到你的登录钥匙。
FinalShell 新建/编辑密钥连接
- 打开 连接管理器。
- 新建 SSH 连接,或编辑已有主机(建议单独一条,名称加
-密钥之类后缀,方便和密码条目区分)。 - 基本信息示例:
| 项 | 填写 |
|---|---|
| 名称 | 自定义,如 hostdzire-密钥 |
| 主机 | 服务器公网 IP 或域名 |
| 端口 | 当前 SSH 端口(默认 22;若已改过则填实际端口) |
| 用户名 | root |
- 认证方式选公钥:
- 私钥路径:浏览选中
C:\Users\你的用户名\.ssh\id_finalshell_rsa
- 私钥路径:浏览选中
- 若生成密钥时设过私钥口令,在对应栏填入;未设置则留空。
- 保存后 连接。
FinalShell 选钥相关说明
部分 FinalShell 3.9.x 会出现反复弹「选择私钥」、绑定后仍像没带上 key 的情况。处理优先级:
- 确认私钥是 PEM/RSA(本文生成方式),路径正确、文件完整。
- 在该连接的编辑页 重新浏览绑定 私钥,保存后再连。
- 若仍异常:用 Windows 自带 OpenSSH 先验证服务器侧密钥是否正确(见下一步)。OpenSSH 能通、FinalShell 不通,多半是客户端 UI/绑定问题,不是
authorized_keys写错。
测通
本机 PowerShell(端口仍为 22 时):
1 | ssh -i $env:USERPROFILE\.ssh\id_finalshell_rsa -o IdentitiesOnly=yes root@你的服务器IP |
- 第一次连接会提示确认 host key,输入
yes。 -o IdentitiesOnly=yes:只用你指定的私钥,避免本机 agent 里其他钥匙干扰排错。
能进入 root shell 即密钥链路完整。 此时可把 FinalShell 里旧的「仅密码」连接留着备用,或改成同一把私钥后日常只用密钥条目。
小结
整条链路可以记成:
1 | 服务器生成 RSA PEM |
私钥只在本机、公钥在服务器,是 SSH 密钥登录的正确形态。FinalShell 负责「连得舒服」;密钥本身是否正确,以 绑定同一把私钥的 OpenSSH 测通 为准,两边一起用排错最快。
)





