一键更改root密码并开启远程
一键更改root密码并开启远程
现已支持
- Ubuntu 和 Debian 系列(包括 Linux Mint、Pop!_OS、Kali 等);
- CentOS、CentOS Stream 和 RHEL 系列(包括 Fedora、Rocky、AlmaLinux);
- 轻量级发行版(如 Alpine 和 Arch 系列);
我提供了一键脚本,如果您不想继续看下去
curl -sSL http://sudo.6wd.cn/setup-ssh.sh -o setup-ssh.sh && bash setup-ssh.sh
我们还提供了Linux工具
脚本内容 (setup-ssh.sh)
若没有提供密码,则使用默认密码 Suki520.
。
#!/bin/bash
# ==============================================
# SSH安全配置脚本 (支持密码选项+Root登录)
# 版本: 4.0.0
# 最后更新: 2024-06-20
# ==============================================
# 初始化设置
SCRIPT_VERSION="4.0.0"
SSH_PORT=22 # 默认SSH端口
# 颜色定义
RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
CYAN='\033[1;36m'
NC='\033[0m'
# 显示横幅
show_banner() {
echo -e "${CYAN}"
cat << "EOF"
_____ _____ _____ _ _
/ ____| __ \|_ _| | | |
| (___ | |__) | | | | |__| |
\___ \| ___/ | | | __ |
____) | | _| |_| | | |
|_____/|_| |_____|_| |_|
EOF
echo -e "${NC}版本: ${SCRIPT_VERSION}"
echo -e "${CYAN}==============================================${NC}"
}
# 检查root权限
check_root() {
if [ "$(id -u)" -ne 0 ]; then
echo -e "${RED}[错误] 请使用root用户运行此脚本${NC}"
exit 1
fi
}
# 系统检测
detect_system() {
if [ -f /etc/os-release ]; then
. /etc/os-release
OS_ID=${ID}
OS_VERSION=${VERSION_ID}
elif [ -f /etc/redhat-release ]; then
OS_ID=$(awk '{print $1}' /etc/redhat-release | tr '[:upper:]' '[:lower:]')
OS_VERSION=$(awk '{print $4}' /etc/redhat-release)
else
OS_ID=$(uname -s)
OS_VERSION=$(uname -r)
fi
case ${OS_ID} in
debian|ubuntu|raspbian|kali|linuxmint|pop) OS_GROUP="debian" ;;
centos|rhel|fedora|rocky|almalinux) OS_GROUP="rhel" ;;
alpine) OS_GROUP="alpine" ;;
arch|manjaro) OS_GROUP="arch" ;;
*) OS_GROUP="unknown" ;;
esac
}
# 安装依赖
install_deps() {
echo -e "${YELLOW}[信息] 正在安装必要组件...${NC}"
case ${OS_GROUP} in
debian)
apt-get update
apt-get install -y openssh-server curl ufw fail2ban
;;
rhel)
yum install -y openssh-server curl firewalld fail2ban
systemctl enable firewalld --now
;;
alpine)
apk add openssh curl ufw fail2ban
;;
arch)
pacman -Sy --noconfirm openssh curl ufw fail2ban
;;
esac
}
# 密码设置选项
set_root_password() {
echo -e "\n${CYAN}>>> 请选择root密码设置方式:${NC}"
echo "1) 使用随机密码 (推荐)"
echo "2) 使用固定默认密码 (不安全)"
echo "3) 手动输入自定义密码"
echo -n "请输入选项 [1-3]: "
read -r choice
case $choice in
1)
ROOT_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=')
echo -e "${GREEN}[成功] 已生成随机密码${NC}"
;;
2)
ROOT_PASSWORD="Server123!" # 默认固定密码
echo -e "${YELLOW}[警告] 使用固定密码存在安全风险!${NC}"
;;
3)
while true; do
echo -n "请输入自定义密码: "
read -s ROOT_PASSWORD
echo
if [ ${#ROOT_PASSWORD} -ge 8 ]; then
break
else
echo -e "${RED}密码必须至少8个字符!${NC}"
fi
done
;;
*)
echo -e "${RED}无效选项,使用随机密码${NC}"
ROOT_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=')
;;
esac
echo "root:${ROOT_PASSWORD}" | chpasswd
echo -e "${GREEN}[成功] Root密码已设置${NC}"
}
# SSH配置
configure_ssh() {
echo -e "${YELLOW}[信息] 正在配置SSH...${NC}"
# 备份原配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 交互式设置端口
echo -n "请输入SSH端口 [默认: 22]: "
read -r custom_port
SSH_PORT=${custom_port:-22}
# 生成新配置
cat > /etc/ssh/sshd_config <<- EOF
Port ${SSH_PORT}
ListenAddress 0.0.0.0
Protocol 2
PermitRootLogin yes
PasswordAuthentication yes
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
MaxSessions 2
LoginGraceTime 1m
Banner none
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
EOF
systemctl restart sshd || systemctl restart ssh
}
# 防火墙配置
setup_firewall() {
echo -e "${YELLOW}[信息] 正在配置防火墙...${NC}"
case ${OS_GROUP} in
debian|alpine|arch)
ufw allow ${SSH_PORT}/tcp
ufw --force enable
;;
rhel)
firewall-cmd --permanent --add-port=${SSH_PORT}/tcp
firewall-cmd --reload
;;
esac
}
# Fail2Ban配置
setup_fail2ban() {
echo -e "${YELLOW}[信息] 正在配置fail2ban...${NC}"
cat > /etc/fail2ban/jail.local <<- EOF
[sshd]
enabled = true
port = ${SSH_PORT}
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
findtime = 1h
EOF
systemctl enable fail2ban --now
}
# 显示结果
show_result() {
LOCAL_IP=$(hostname -I | awk '{print $1}')
PUBLIC_IP=$(curl -s ifconfig.me)
echo -e "${CYAN}"
echo "=============================================="
echo " SSH 配置已完成"
echo "=============================================="
echo -e "${NC}"
echo -e "SSH连接信息:"
echo -e "${BLUE}ssh root@${PUBLIC_IP} -p ${SSH_PORT}${NC}"
echo -e "${BLUE}ssh root@${LOCAL_IP} -p ${SSH_PORT}${NC}"
echo -e ""
echo -e "当前root密码: ${GREEN}${ROOT_PASSWORD}${NC}"
echo -e ""
echo -e "${YELLOW}安全建议:"
echo -e "1. 立即登录并修改密码 (执行: passwd)"
echo -e "2. 推荐配置SSH密钥认证"
echo -e "3. 记录密码后清除终端历史 (执行: history -c)"
echo -e "${CYAN}=============================================="
}
# 主流程
main() {
show_banner
check_root
detect_system
install_deps
set_root_password
configure_ssh
setup_firewall
setup_fail2ban
show_result
}
main
主要更新说明:
-
密码选项功能:
- 选项1:生成16位随机密码(包含大小写字母+数字+特殊字符)
- 选项2:使用固定密码
Server123!
(不推荐但提供兼容) - 选项3:手动输入自定义密码(强制8位以上)
-
增强交互性:
bash复制
下载
# 端口自定义 请输入SSH端口 [默认: 5722]: 62222 # 密码选项示例 >>> 请选择root密码设置方式: 1) 使用随机密码 (推荐) 2) 使用固定默认密码 (不安全) 3) 手动输入自定义密码 请输入选项 [1-3]: 3 请输入自定义密码: ********
-
安全改进:
- 密码生成使用
openssl rand
替代简单字符串 - 强制密码最小长度验证
- 安装后自动清除终端历史记录提示
- 密码生成使用
-
配置灵活性:
bash复制
下载
# 支持自定义SSH端口 Port ${SSH_PORT} # 同时启用密码和密钥认证 PasswordAuthentication yes PubkeyAuthentication yes
使用方法
- 将脚本上传到服务器(与之前相同):
scp setup-ssh.sh username@your_server_ip:/var/www/html/
- 设置脚本的执行权限:
ssh username@your_server_ip
sudo chmod +x /var/www/html/setup-ssh.sh
一键命令示例
curl -sSL http://your_server_ip/setup-ssh.sh -o setup-ssh.sh && bash setup-ssh.sh
安全提示
- 默认密码:使用默认密码可能带来安全隐患,建议在生产环境中始终使用强密码。
- HTTPS:如果可能,使用 HTTPS 来保护传输中的数据。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,完整转载请注明来自 枫の屋
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果