debian13亲测可用,其他系统自测。
个人不太喜欢用这些一键脚本修改,最近妥协了,主要节约时间!!!!顺便也分享一下吧。
怎么用秘钥登录,这个不包含在这次教程内,请自行根据你自己的工具搜索相关教程。
顺便分享一个我常用的DD debian13脚本 登录密码:LeitboGi0ro
wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh
bash InstallNET.sh -debian 13
reboot
第1步:
用root登录 运行命令创建秘钥对 生成的秘钥对在 /root/.ssh 带.pub后缀的是公钥 不带的是私钥
rm -f ~/.ssh/id_ed25519* && mkdir -p ~/.ssh && chmod 700 ~/.ssh && ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519 -q && cd ~/.ssh && ls -la
将不带后缀.pub下载下来保存。
如果你的公钥私钥长期不变 可以直接保存2个在本地,以后上传带后缀.pub到/root/.ssh目录 这样方便管理。也不用在运行步骤1的命令。
第2步:
在vps运行命令
nano setup_ssh.sh
chmod +x setup_ssh.sh
sudo ./setup_ssh.sh
把代码写入 setup_ssh.sh
SSH_PORT='' # 修改SSH端口(非必须,不用改请留空)
MY_PUB_KEY='' # 填入你的公钥(这是必填项,否则无法登录)
NEW_PASSWORD='' # 设置ROOT新密码(非必须。注意:密码里别带单引号,不然会报错)
# ========================================================
# 脚本功能:清空旧公钥 -> 写入新公钥 -> 修改密码 -> 改端口 -> 自毁
# 需 root 权限 运行
# ========================================================
# 【自定义设置】修改SSH端口(非必须,不用改请留空)
SSH_PORT=''
# 【自定义设置】填入你的公钥(这是必填项,否则无法登录)
MY_PUB_KEY=''
# 【自定义设置】设置ROOT新密码(非必须。注意:密码里别带单引号,不然会报错)
NEW_PASSWORD=''
# --- 脚本逻辑开始 ---
# 检查 root 权限
if [ "$EUID" -ne 0 ]; then
echo "❌ 错误: 请以 root 权限运行此脚本。"
exit 1
fi
# 1. 修复主机名解析 (防止 sudo 慢或报错)
CURRENT_HOSTNAME=$(hostname)
if ! grep -q "$CURRENT_HOSTNAME" /etc/hosts; then
echo "正在修复主机名解析..."
echo "127.0.1.1 $CURRENT_HOSTNAME" >> /etc/hosts
fi
# 2. 修改 Root 密码
if [ -n "$NEW_PASSWORD" ]; then
echo "正在修改 Root 密码..."
printf "root:%s" "$NEW_PASSWORD" | chpasswd
echo "✅ 密码修改成功。"
else
echo "ℹ️ 密码变量为空,跳过修改。"
fi
# 3. 配置 SSH 公钥
echo "正在配置 SSH 公钥..."
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 覆盖旧的 authorized_keys
echo "$MY_PUB_KEY" > ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
echo "✅ 公钥刷新成功。"
# 4. 修改 SSH 配置文件
echo "正在优化 SSH 配置..."
# A. 端口逻辑
if [ -n "$SSH_PORT" ]; then
if grep -q "^#\?Port" /etc/ssh/sshd_config; then
sed -i "s/^#\?Port.*/Port $SSH_PORT/" /etc/ssh/sshd_config
else
echo "Port $SSH_PORT" >> /etc/ssh/sshd_config
fi
echo "✅ 端口已设置为: $SSH_PORT"
else
echo "ℹ️ 端口变量为空,保持当前系统端口设置。"
SSH_PORT=$(grep "^Port" /etc/ssh/sshd_config | awk '{print $2}')
[ -z "$SSH_PORT" ] && SSH_PORT="22"
fi
# B. 开启公钥认证 & 允许 Root 登录
sed -i 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
sed -i 's/^#\?AuthorizedKeysFile.*/AuthorizedKeysFile .ssh\/authorized_keys .ssh\/authorized_keys2/' /etc/ssh/sshd_config
# 5. 重启 SSH 服务
echo "正在重启 SSH 服务..."
if systemctl is-active --quiet sshd; then
systemctl restart sshd
elif systemctl is-active --quiet ssh; then
systemctl restart ssh
else
service ssh restart || service sshd restart
fi
# 6. 结果汇报
echo "------------------------------------------------"
echo "✨ 脚本执行完毕!"
echo "🌐 SSH 端口: $SSH_PORT"
if [ -n "$NEW_PASSWORD" ]; then
echo "🔐 Root 密码: $NEW_PASSWORD"
else
echo "🔐 Root 密码: 未填写维持原状"
fi
echo "------------------------------------------------"
echo "⚠️ 手动模式下 重要安全步骤:"
echo "1. 请【不要关闭】当前连接窗口。"
echo "2. 请新开一个终端窗口尝试登录: ssh -p $SSH_PORT root@服务器IP"
echo "3. 登录成功后,运行以下命令禁用密码登录以确保安全"
echo "sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config && systemctl restart ssh"
echo "------------------------------------------------"
# 【运行完后给予选项】
echo "请选择后续操作:"
echo "1:自动模式:禁用密码登录并重启服务器"
echo "2:手动模式:不禁用密码登录和重启服务器"
read -p "请输入选项 (1/2): " choice
case $choice in
1)
echo "正在禁用密码登录..."
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
echo "✅ 密码登录已禁用。"
echo "正在重启服务器..."
rm -f -- "$0" 2>/dev/null || true
reboot
;;
2)
echo "已选择手动操作。"
;;
*)
echo "无效输入,默认执行手动操作。"
;;
esac
# 7. 自毁(已优化:使用 -f 强制删除 + 静默错误,避免 "No such file" 报错)
rm -f -- "$0" 2>/dev/null || true
echo "✅ 脚本已自毁。"
学会了。一会交作业
nb 学会了
学习学习
学习
学习
可以的
还是用自己的脚本简单
学习学习
话说为什么都开启秘钥登录了还需要改端口呢?