项目地址:https://github.com/ike-sh/ssh-init
最近折腾 VPS 的时候,我发现很多人都会卡在 SSH 密钥登录这一步:
- 不知道公钥和私钥有什么区别
- 不知道 GitHub SSH Key 应该粘贴什么
- 不知道 FinalShell 应该导入哪个文件
- 改完
sshd_config后又怕把自己锁在服务器外 - 想禁用密码登录,但又担心 SSH 重启失败
所以我做了一个小工具:ssh-init。
它不是 BBR 脚本,不是 Docker 脚本,也不是一键建站脚本。它只专注一件事:
帮你把 Linux 服务器切换到 SSH 密钥登录,并禁用密码登录,同时提供备份和恢复入口。
项目特点
ssh-init 是一个 POSIX sh 脚本,主要面向 Linux VPS / 独服用户,用来完成 SSH 密钥登录初始化和安全加固。
它支持:
- 从 GitHub 导入 SSH 公钥
- 在服务器上生成 Ed25519 密钥
- 查看服务器本机已有 SSH 密钥
- 生成新的本机 Ed25519 密钥
- 自动配置
authorized_keys - 禁用 SSH 密码登录
- 保留 root 密钥登录
- 修改前自动备份
sshd_config - 修改前自动备份
authorized_keys - SSH 配置校验失败自动恢复
- 提供交互式恢复菜单
- 查看当前 SSH 登录配置
脚本定位很简单:只做 SSH 密钥登录配置和密码登录禁用。
一键使用
curl -fsSL https://raw.githubusercontent.com/ike-sh/ssh-init/main/init.sh -o init.sh && sh init.sh
运行后会进入中文交互菜单:
============================================================
SSH 密钥登录配置工具
============================================================
1. 从 GitHub 导入公钥并禁用密码登录
2. 在服务器生成 Ed25519 密钥并配置登录
3. 查看本机已有 SSH 密钥
4. 生成新的本机 Ed25519 密钥
5. 恢复 SSH 配置备份
6. 查看当前 SSH 登录配置
7. 退出
============================================================
请选择 [1-7]:
普通用户直接按菜单走就行。
推荐使用方式:GitHub 公钥导入
如果你已经在 GitHub 添加过 SSH 公钥,直接选择菜单:
1. 从 GitHub 导入公钥并禁用密码登录
然后输入你的 GitHub 用户名。
脚本会从下面这个地址读取你的公开 SSH 公钥:
https://github.com/你的GitHub用户名.keys
例如:
https://github.com/ike-sh.keys
然后它会把有效公钥写入当前用户的:
~/.ssh/authorized_keys
并自动修改 SSH 配置,禁用密码登录。
GitHub 应该添加什么?
GitHub 上添加的是公钥,不是私钥。
公钥一般长这样:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... user@device
不要把这种内容粘贴到 GitHub:
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
这是私钥,不能上传。
GitHub 添加入口:
https://github.com/settings/keys
添加时:
- Key type 选择
Authentication Key - Title 随便写,例如
VPS、Home Laptop、ssh-init - Key 粘贴
ssh-ed25519开头的公钥
添加完成后,可以访问:
https://github.com/你的用户名.keys
如果能看到 ssh-ed25519 或 ssh-rsa 开头的内容,就说明公钥已经可以被脚本读取。
不想在本地电脑生成密钥?
有些用户不想在 Windows / macOS / Linux 本地手动生成密钥,也可以直接在服务器上生成。
菜单里有两个相关功能:
3. 查看本机已有 SSH 密钥
4. 生成新的本机 Ed25519 密钥
你可以先选择菜单 4,让服务器生成一对 Ed25519 密钥。
脚本会显示公钥,复制到 GitHub 即可。
然后再回到菜单 1,输入 GitHub 用户名,让脚本从 GitHub 拉取公钥并完成 SSH 配置。
如果需要把私钥导入 FinalShell,可以选择菜单 3,输入 SHOW 后查看私钥内容。
注意:
- 公钥可以放 GitHub
- 私钥必须保存到本地
- FinalShell 导入的是私钥
- GitHub 粘贴的是公钥
.pub文件是公钥,不是私钥
服务器生成密钥并直接配置登录
如果你想更直接,也可以选择菜单:
2. 在服务器生成 Ed25519 密钥并配置登录
这个模式会:
- 在服务器临时生成 Ed25519 密钥对
- 把公钥写入当前用户的
authorized_keys - 禁用 SSH 密码登录
- 打印公钥和私钥
- 删除服务器临时私钥文件
脚本会清晰输出私钥区块:
============================================================
请复制保存以下私钥
============================================================
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
============================================================
私钥结束
============================================================
你需要把私钥保存到本地,例如 Windows:
C:\Users\你的用户名\.ssh\id_ed25519_SERVER
FinalShell 新建连接时选择“公钥”认证,然后导入这个私钥文件。
会修改哪些 SSH 配置?
脚本会备份并修改:
/etc/ssh/sshd_config
确保以下配置生效:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
KbdInteractiveAuthentication no
PermitEmptyPasswords no
PermitRootLogin prohibit-password
其中:
PermitRootLogin prohibit-password
意思是:
禁止 root 密码登录,但允许 root 使用密钥登录。
所以你仍然可以用 root 私钥登录,只是不能再用 root 密码登录。
自动备份和恢复
每次修改前,脚本会自动备份:
/etc/ssh/sshd_config.bak.YYYYmmdd_HHMMSS
~/.ssh/authorized_keys.bak.YYYYmmdd_HHMMSS
如果配置后发现登录异常,可以通过云厂商 VNC / Console 登录服务器,再重新运行脚本:
sh init.sh
选择:
5. 恢复 SSH 配置备份
恢复菜单支持:
- 恢复最新
sshd_config备份 - 恢复最新
authorized_keys备份 - 同时恢复二者
- 查看当前 SSH 登录配置
- 清空当前用户
authorized_keys(危险)
恢复 sshd_config 后,脚本会再次执行 sshd -t 校验,并重启 SSH 服务。
查看当前 SSH 登录状态
选择菜单:
6. 查看当前 SSH 登录配置
可以查看:
- 当前用户
- HOME 路径
.ssh权限authorized_keys是否存在authorized_keys行数sshd -T生效配置- SSH 监听端口
比如会显示:
port 22
permitrootlogin without-password
pubkeyauthentication yes
passwordauthentication no
kbdinteractiveauthentication no
permitemptypasswords no
这样可以很直观看到当前是否已经禁用了密码登录。
命令行模式
除了交互菜单,也保留了命令行模式。
从 GitHub 导入公钥:
sh init.sh github GitHub用户名
服务器生成密钥并配置登录:
sh init.sh gen
查看本机密钥:
sh init.sh keys
生成新的本机 Ed25519 密钥:
sh init.sh keygen
恢复备份:
sh init.sh restore
查看状态:
sh init.sh status
使用前提醒
强烈建议:
- 确认云厂商 VNC / Console 可用
- 执行脚本后不要立即关闭当前 SSH 窗口
- 新开一个终端测试密钥登录
- 确认密钥登录成功后,再关闭旧窗口
如果你用的是 GitHub 公钥模式,登录命令一般是:
ssh -i ~/.ssh/id_ed25519 root@服务器IP
如果 Windows 提示:
Identity file not accessible
说明你本地私钥路径不对,或者你只有 .pub 公钥,没有私钥。
适合谁用?
适合:
- VPS 新手
- 想禁用 SSH 密码登录的人
- 想用 GitHub 公钥快速初始化服务器的人
- FinalShell 用户
- 经常重装 VPS 的人
- 想保留回滚入口的人
不适合:
- 想要 BBR / 内核优化的人
- 想要一键建站的人
- 想要 Docker / WARP / DD 系统的人
- 想要复杂多用户权限管理的人
项目地址
GitHub:
https://github.com/ike-sh/ssh-init
一键命令:
curl -fsSL https://raw.githubusercontent.com/ike-sh/ssh-init/main/init.sh -o init.sh && sh init.sh
如果你觉得有用,欢迎 Star、反馈问题,也欢迎帮忙测试不同系统环境。
最后
我做这个脚本的初衷很简单:
很多人知道“SSH 密钥登录更安全”,但真正配置时经常会卡在:
- 公钥私钥分不清
- GitHub 应该粘贴什么
- FinalShell 应该导入哪个文件
sshd_config改错怕断连- 禁用密码登录后无法恢复
所以这个脚本尽量把流程做成中文菜单,把关键风险点都写清楚,并加入备份恢复。
核心目标就一句话:
让 Linux 服务器 SSH 密钥登录配置变得简单、直观、可恢复。
bd
我觉得可能脚本比手动还麻烦
bd
@gmlxh #2 我自己觉得好用。哈哈哈哈哈
@小动物维修中心 #0 绑顶,今天下午折腾了一个小时的密钥,没想成功,放弃了。
@xixu520 #5 我搞这个也是老是被扫,让天才程序员搞了个这个出来。
ssh开那里总是被人爆破也麻烦。所以想折腾也麻烦。
@xixu520 #7 所以才有这个脚本的诞生,天天被扫。直接开密钥。
好东西,适合小白使用,绑定
有点怕怕,毕竟这个入口是最核心的
BD