还在用默认 22 端口?这个脚本教你修改 SSH 端口并避开 90% 的暴力破解
nanshan 2025-08-01 19:26 4 浏览 0 评论
一、脚本概述
用于修改 SSH 服务配置的 Bash 脚本。通过运行该脚本,用户可以方便地对 SSH 服务的多个重要配置项进行修改,如修改 SSH 端口号、禁用 root 用户登录、禁用密码登录等。同时,脚本在运行前会对原始的 SSH 配置文件进行备份,以防止配置修改出现问题。
二、环境要求
- 操作系统:该脚本主要适用于基于 Linux 系统且使用 sshd 作为 SSH 服务端的环境,例如 CentOS、Ubuntu 等。
- 权限:由于脚本需要修改 /etc/ssh/sshd_config 配置文件以及可能涉及防火墙操作,因此必须以 root 用户身份运行。
三、脚本使用步骤
1. 下载脚本
将脚本保存为一个文件,例如 ssh_config_modifier.sh。可以使用文本编辑器创建该文件,并将脚本内容复制进去。
2. 赋予执行权限
在终端中,使用 chmod 命令为脚本赋予执行权限:
chmod +x ssh_config_modifier.sh
3. 运行脚本
以 root 用户身份运行脚本:
sudo ./ssh_config_modifier.sh
如果当前用户不是 root,脚本会提示 “ 请使用 root 用户运行此脚本”,并退出运行。
4. 备份原始配置
脚本在运行时会自动对 /etc/ssh/sshd_config 文件进行备份,备份文件的命名规则为
sshd_config.bak.YYYY-MM-DD-HHMMSS,其中 YYYY-MM-DD-HHMMSS 是备份时的日期和时间。备份完成后,会输出提示信息 “ 已备份配置到:
/etc/ssh/sshd_config.bak.YYYY-MM-DD-HHMMSS”。
5. 选择操作
脚本会显示一个菜单,列出可以进行的操作选项:
请选择一个操作:
1) 修改 SSH 端口号
2) 禁用 root 用户登录
3) 禁用密码登录
4) 只允许特定用户登录
5) 禁止空密码用户登录
6) 设置最大认证尝试次数
7) 设置登录超时时间
8) 禁用 DNS 反向查找(加快登录速度)
9) 返回
请输入选择项(数字):
用户需要输入相应的数字来选择要执行的操作。
6. 具体操作说明
6.1 修改 SSH 端口号(选项 1)
- 脚本会提示用户输入新的 SSH 端口号,端口号范围为 1 - 65535
请输入新的 SSH 端口号(1-65535):
- 如果输入的端口号有效,脚本会将新的端口号写入 /etc/ssh/sshd_config 文件,并提示 “ 已设置 SSH 端口为 [端口号],别忘记在防火墙中放开该端口!”。
- 如果输入的端口号无效,脚本会提示 “ 无效端口号,请输入有效的端口号!”,并再次显示菜单供用户重新选择。
6.2 禁用 root 用户登录(选项 2)
- 选择该选项后,脚本会将 /etc/ssh/sshd_config 文件中的 PermitRootLogin 配置项设置为 no,表示禁止 root 用户通过 SSH 登录。
- 操作完成后,会提示 “ 已禁用 root 用户登录”。
6.3 禁用密码登录(选项 3)
- 选择该选项后,脚本会提示用户 “ 你选择了禁用密码登录,请确保你已设置 SSH 密钥,否则可能无法登录!”,并询问用户是否继续禁用密码登录:
是否继续禁用密码登录?(yes/no):
- 如果用户输入 yes,脚本会将 /etc/ssh/sshd_config 文件中的 PasswordAuthentication 配置项设置为 no,并提示 “ 已禁用密码登录”。
- 如果用户输入 no,脚本会提示 “ 已跳过禁用密码登录操作”。
6.4 只允许特定用户登录(选项 4)
- 脚本会提示用户输入允许通过 SSH 登录的用户列表,多个用户之间用空格分隔。如果不需要设置特定用户,直接按回车键跳过。
请输入允许 SSH 登录的用户(多个用空格分隔,留空跳过):
- 如果用户输入了有效的用户名,脚本会将这些用户名写入 /etc/ssh/sshd_config 文件的 AllowUsers 配置项中,并提示 “ 设置成功,允许以下用户登录: [用户名列表]”。
6.5 禁止空密码用户登录(选项 5)
- 选择该选项后,脚本会将 /etc/ssh/sshd_config 文件中的 PermitEmptyPasswords 配置项设置为 no,表示禁止使用空密码的用户通过 SSH 登录。
- 操作完成后,会提示 “ 已禁止空密码用户登录”。
6.6 设置最大认证尝试次数(选项 6)
- 脚本会提示用户输入最大认证尝试次数:
请输入最大认证尝试次数:
- 如果用户输入的是有效的数字,脚本会将该数字写入 /etc/ssh/sshd_config 文件的 MaxAuthTries 配置项中,并提示 “ 设置最大认证尝试次数为 [次数]”。
- 如果输入无效,脚本会提示 “ 输入无效,请输入一个有效的数字!”。
6.7 设置登录超时时间(选项 7)
- 脚本会提示用户输入登录超时时间(单位为秒):
请输入登录超时时间(秒):
- 如果用户输入的是有效的数字,脚本会将该数字写入 /etc/ssh/sshd_config 文件的 LoginGraceTime 配置项中,并提示 “ 设置登录超时时间为 [时间] 秒”。
- 如果输入无效,脚本会提示 “ 输入无效,请输入一个有效的数字!”。
6.8 禁用 DNS 反向查找(选项 8)
- 选择该选项后,脚本会将 /etc/ssh/sshd_config 文件中的 UseDNS 配置项设置为 no,以加快 SSH 登录速度。
- 操作完成后,会提示 “ 已禁用 DNS 反向查找(加快登录速度)”。
6.9 返回(选项 9)
- 选择该选项后,脚本会输出 “退出脚本” 并终止运行。
四、注意事项
- 防火墙设置:在修改 SSH 端口号后,需要手动在防火墙中放开新的端口,否则可能无法通过新端口进行 SSH 连接。例如,使用 firewall-cmd 命令(适用于 CentOS 等使用 firewalld 的系统):
firewall-cmd --permanent --add-port=[端口号]/tcp
firewall-cmd --reload
- 密钥配置:在禁用密码登录前,请确保已经为需要登录的用户配置了 SSH 密钥,否则将无法通过 SSH 登录服务器。
- 备份恢复:如果在修改配置后出现问题,可以使用脚本自动生成的备份文件进行恢复。例如,使用以下命令恢复配置:
cp /etc/ssh/sshd_config.bak.YYYY-MM-DD-HHMMSS /etc/ssh/sshd_config
重新启动 SSH 服务:
systemctl restart sshd
完整配置脚本:
#!/bin/bash
# 定义颜色
YELLOW='\033[1;33m'
BLACK='\033[0;30m'
BOLD_BLACK='\033[1;30m'
RESET='\033[0m'
# ssh 配置文件路径
SSH_CONFIG="/etc/ssh/sshd_config"
BACKUP="/etc/ssh/sshd_config.bak.$(date +%F-%H%M%S)"
# 确保脚本使用 root 运行
if [[ $EUID -ne 0 ]]; then
echo -e "${YELLOW} 请使用 root 用户运行此脚本${RESET}"
exit 1
fi
# 备份原始配置
cp "$SSH_CONFIG" "$BACKUP"
echo -e "${YELLOW} 已备份配置到: ${BACKUP}${RESET}"
# 修改配置项函数
function set_config() {
key=$1
value=$2
if grep -qE "^\s*#?\s*${key}" "$SSH_CONFIG"; then
sed -i "s|^#*\s*${key}.*|${key} ${value}|" "$SSH_CONFIG"
else
echo "${key} ${value}" >> "$SSH_CONFIG"
fi
}
# 显示菜单
function show_menu() {
echo -e "${YELLOW}请选择一个操作:${RESET}"
echo "1) 修改 SSH 端口号"
echo "2) 禁用 root 用户登录"
echo "3) 禁用密码登录"
echo "4) 只允许特定用户登录"
echo "5) 禁止空密码用户登录"
echo "6) 设置最大认证尝试次数"
echo "7) 设置登录超时时间"
echo "8) 禁用 DNS 反向查找(加快登录速度)"
echo "9) 返回"
read -p "$(echo -e "${YELLOW}请输入选择项(数字): ${RESET}")" choice
case $choice in
1)
modify_port
;;
2)
disable_root_login
;;
3)
disable_password_login
;;
4)
allow_users
;;
5)
disable_empty_password
;;
6)
set_max_auth_tries
;;
7)
set_login_grace_time
;;
8)
disable_dns
;;
9)
echo -e "${YELLOW}退出脚本${RESET}"
exit 0
;;
*)
echo -e "${YELLOW}无效选择,请重新输入!${RESET}"
show_menu
;;
esac
}
# 修改 SSH 端口号
function modify_port() {
read -p "$(echo -e "${YELLOW}请输入新的 SSH 端口号(1-65535): ${RESET}")" ssh_port
if [[ $ssh_port =~ ^[0-9]+$ && $ssh_port -ge 1 && $ssh_port -le 65535 ]]; then
set_config "Port" "$ssh_port"
echo -e "${YELLOW} 已设置 SSH 端口为 $ssh_port,别忘记在防火墙中放开该端口!${RESET}"
else
echo -e "${YELLOW} 无效端口号,请输入有效的端口号!${RESET}"
fi
show_menu
}
# 禁用 root 用户登录
function disable_root_login() {
set_config "PermitRootLogin" "no"
echo -e "${YELLOW} 已禁用 root 用户登录${RESET}"
show_menu
}
# 禁用密码登录
function disable_password_login() {
echo -e "${YELLOW} 你选择了禁用密码登录,请确保你已设置 SSH 密钥,否则可能无法登录!${RESET}"
read -p "$(echo -e "${YELLOW}是否继续禁用密码登录?(yes/no): ${RESET}")" confirm_disable
if [[ $confirm_disable == "yes" ]]; then
set_config "PasswordAuthentication" "no"
echo -e "${YELLOW} 已禁用密码登录${RESET}"
else
echo -e "${YELLOW} 已跳过禁用密码登录操作${RESET}"
fi
show_menu
}
# 只允许特定用户登录
function allow_users() {
read -p "$(echo -e "${YELLOW}请输入允许 SSH 登录的用户(多个用空格分隔,留空跳过): ${RESET}")" allowed_users
[[ -n $allowed_users ]] && set_config "AllowUsers" "$allowed_users"
echo -e "${YELLOW} 设置成功,允许以下用户登录: $allowed_users${RESET}"
show_menu
}
# 禁止空密码用户登录
function disable_empty_password() {
set_config "PermitEmptyPasswords" "no"
echo -e "${YELLOW} 已禁止空密码用户登录${RESET}"
show_menu
}
# 设置最大认证尝试次数
function set_max_auth_tries() {
read -p "$(echo -e "${YELLOW}请输入最大认证尝试次数: ${RESET}")" max_tries
if [[ $max_tries =~ ^[0-9]+$ ]]; then
set_config "MaxAuthTries" "$max_tries"
echo -e "${YELLOW} 设置最大认证尝试次数为 $max_tries${RESET}"
else
echo -e "${YELLOW} 输入无效,请输入一个有效的数字!${RESET}"
fi
show_menu
}
# 设置登录超时时间
function set_login_grace_time() {
read -p "$(echo -e "${YELLOW}请输入登录超时时间(秒): ${RESET}")" timeout
if [[ $timeout =~ ^[0-9]+$ ]]; then
set_config "LoginGraceTime" "$timeout"
echo -e "${YELLOW} 设置登录超时时间为 $timeout 秒${RESET}"
else
echo -e "${YELLOW} 输入无效,请输入一个有效的数字!${RESET}"
fi
show_menu
}
# 禁用 DNS 反向查找(加快登录速度)
function disable_dns() {
set_config "UseDNS" "no"
echo -e "${YELLOW} 已禁用 DNS 反向查找(加快登录速度)${RESET}"
show_menu
}
# 进入菜单
show_menu
相关推荐
- ubuntu24.04下kubernetes1.30环境搭建
-
设置root用户密码#在Ubuntu系统中,默认情况下root用户是被禁用的(没有设置密码)#而是通过sudo命令让普通用户临时获取管理员权限,#如果需要启用或修改root密...
- Canonical 在 Ubuntu 24.10 发布之前对 Snap 进行了更多改进
-
作为Ubuntu桌面临时工程总监,OliverSmith介绍了Ubuntu24.10的最新进展。在Ubuntu24.10功能冻结之前,GNOME47测试版已经登陆Ubuntu...
- Ubuntu Touch OTA-5手机系统发布:细化电源配置等
-
IT之家8月2日消息,UBports基金会于7月30日发布UbuntuTouch20.04OTA-5版本更新,距离上次OTA-4更新发布相隔6个月时间。Ubuntu...
- Ubuntu更契合英特尔酷睿Ultra,综合性能比Win11高15%
-
IT之家12月23日消息,英特尔本月推出酷睿UltraMeteorLake处理器,那么Win11和Ubuntu发行版两者时间,谁能更好地发挥其性能呢?国外科技媒体phoron...
- 针对英特尔酷睿CPU优化,Canonical发布Ubuntu实时内核
-
IT之家7月27日消息,Canonical今天宣布针对支持时序协调运算(TCC)和时间敏感网络(IEEETSN)的英特尔酷睿处理器,推出优化版实时Ubuntu内核。Canonical...
- 在Ubuntu/Debian上设置永久DNS域名服务器
-
在Linux上设置自定义DNS服务器可以提高性能和安全性,甚至可以通过DNS阻止一些使用地理屏蔽的网站。有几种方法可以做到这一点,包括在许多Linux发行版中包括的NetworkManagerGUI...
- 宣布延期:Ubuntu 24.04 LTS第一个版本发布推迟两周
-
Ubuntu开发团队原计划于8月19日星期四发布Ubuntu24.04.1LTS。然而,由于发现几个重大升级错误,发布被推迟。Ubuntu24.04.1LTS的新发布日期现定为...
- Ubuntu系统已经十岁了 10月新推14.10版
-
|责编:李鑫比较非主流的Ubuntu系统刚刚推出了14.10版,同时大家也可能不知道其实它已经十岁了!它的第一次公布时间为2004年的10月呢。在这次十周年更新中,Ubuntu为用...
- wsl2在休眠后的时间偏差问题的修复
-
笔记本电脑在日常使用中,常常会有进入休眠状态的情况。休眠对于wsl2而言,却造成了时间偏差的问题,休眠期间wsl2的时间停止了。这个问题的根治,需要等微软。本文提供的是一种简单的修复办法。ntp是网络...
- 基于Ubuntu22.04源码安装配置RabbitVCS过程记录
-
基于Ubuntu22.04源码安装配置RabbitVCS过程记录安装开始时间开始时间:2025年7月18日17:09(北京时间)系统:Ubuntu22.04用户:itgather时区:A...
- GNOME 46桌面环境发布,Ubuntu 24.04 LTS和Fedora 40率先预装
-
IT之家3月21日消息,GNOME团队今天发布公告,正式推出代号为“Kathmandu”的GNOME46桌面环境,并已经开放下载。Fedora40发行版将于4月发布,率先预装...
- 如果大家同意的话 Ubuntu可能很快就会有一个新的垃圾桶图标
-
Ubuntu贡献者目前正在构思一个新的垃圾桶图标,该图标最早可能在10月份Ubuntu25.10发布时出现在Dock栏中。关于Ubuntu垃圾桶图标外观的讨论在2019年持续进...
- Ubuntu 25.10 通过更安全地获取时间来提供进一步的安全性提升
-
Canonical宣布将从Ubuntu25.10开始使用一款名为chrony的软件,以实现更安全的时间管理。最终用户无需过于担心这一变化,但它将增强系统安全性,尤其是在加密操作和证书验证方...
- Linux 修改系统时间的两种方式
-
一:更新系统时间的方式1、手动修改通过相关工具来手动修改系统的时间。2、自动同步使用NTP自动同步系统时间。二:手动修改系统时间1、date工具作用:显示和设置系统时间选项:-d<字符串&g...
- Ubuntu计划下版本为RISC-V设置RVA23基线,大量硬件无法升级
-
IT之家7月14日消息,主要Linux发行版之一的Ubuntu计划在其接下来的一个大版本25.10中将对RISC-V处理器的准入门槛设置从此前的RVA20配置文件更新至最新...
你 发表评论:
欢迎- 一周热门
-
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
手机如何设置与显示准确时间的详细指南
-
NAS:DS video/DS file/DS photo等群晖移动端APP远程访问的教程
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
一加手机与电脑互传文件的便捷方法FileDash
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
- 最近发表
-
- ubuntu24.04下kubernetes1.30环境搭建
- Canonical 在 Ubuntu 24.10 发布之前对 Snap 进行了更多改进
- Ubuntu Touch OTA-5手机系统发布:细化电源配置等
- Ubuntu更契合英特尔酷睿Ultra,综合性能比Win11高15%
- 针对英特尔酷睿CPU优化,Canonical发布Ubuntu实时内核
- 在Ubuntu/Debian上设置永久DNS域名服务器
- 宣布延期:Ubuntu 24.04 LTS第一个版本发布推迟两周
- Ubuntu系统已经十岁了 10月新推14.10版
- wsl2在休眠后的时间偏差问题的修复
- 基于Ubuntu22.04源码安装配置RabbitVCS过程记录
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)