logo NodeSeekbeta

【开源分享】ssh-init:一个更适合小白的 Linux SSH 密钥登录配置工具

项目地址: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 密钥并配置登录

这个模式会:

  1. 在服务器临时生成 Ed25519 密钥对
  2. 把公钥写入当前用户的 authorized_keys
  3. 禁用 SSH 密码登录
  4. 打印公钥和私钥
  5. 删除服务器临时私钥文件

脚本会清晰输出私钥区块:

============================================================
 请复制保存以下私钥
============================================================
-----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

使用前提醒

强烈建议:

  1. 确认云厂商 VNC / Console 可用
  2. 执行脚本后不要立即关闭当前 SSH 窗口
  3. 新开一个终端测试密钥登录
  4. 确认密钥登录成功后,再关闭旧窗口

如果你用的是 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 密钥登录配置变得简单、直观、可恢复。

123
123

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72267位seeker

🎉欢迎新用户🎉