最近总是不想动,服务器的安全又不得不考虑,有时候还会忘记修改服务器的端口和密码,就诞生了下面的Shell脚本。
脚本包含了日志记录,备份SSH文件,修改SSH端口,修改SSH密码,更新防火墙、发送加密邮件,设置定时任务。
脚本目前只在Ubuntu系统测试,其它系统未测试,以下标红的信息一定要看。
注意:在使用脚本之前一定要先进行测试,尤其是发送邮件和接收邮件是否正常,否则会很麻烦。
1、安装依赖库
sudo apt-get update sudo apt-get install -y ssmtp openssl
2、配置ssmtp
sudo vi /etc/ssmtp/ssmtp.conf
2.1添加或修改以下内容:这里的信息都需要修改为你自己的。
root=postmaster mailhub=smtp.your-email-provider.com:587 [email protected] AuthPass=your-email-password UseSTARTTLS=YES
3、Shell脚本,
#!/bin/bash # 配置 EMAIL="[email protected]" MIN_PORT=1024 MAX_PORT=65535 MIN_PASS_LENGTH=8 MAX_PASS_LENGTH=16 LOG_FILE="/var/log/auto_update_ssh_password.log" BACKUP_DIR="/etc/ssh/backup" SERVER_NAME=$(hostname) # 获取服务器名称 # 创建备份目录 mkdir -p $BACKUP_DIR # 生成随机端口号 NEW_PORT=$(shuf -i $MIN_PORT-$MAX_PORT -n 1) # 生成随机密码 PASSWORD_LENGTH=$(shuf -i $MIN_PASS_LENGTH-$MAX_PASS_LENGTH -n 1) NEW_PASSWORD=$(openssl rand -base64 $PASSWORD_LENGTH | tr -dc 'a-zA-Z0-9' | head -c $PASSWORD_LENGTH) # 获取当前SSH端口 CURRENT_PORT=$(grep "^Port " /etc/ssh/sshd_config | awk '{print \$2}') # 备份SSH配置文件 sudo cp /etc/ssh/sshd_config $BACKUP_DIR/sshd_config_$(date +%F_%T) # 修改SSH端口 if [ -z "$CURRENT_PORT" ]; then # 如果没有找到Port配置,添加新的端口配置 echo "Port $NEW_PORT" | sudo tee -a /etc/ssh/sshd_config else # 替换现有的端口配置 sudo sed -i "s/^Port $CURRENT_PORT/Port $NEW_PORT/" /etc/ssh/sshd_config fi # 检测并更新防火墙规则 if command -v ufw > /dev/null; then # 使用ufw sudo ufw allow $NEW_PORT/tcp if [ ! -z "$CURRENT_PORT" ]; then sudo ufw delete allow $CURRENT_PORT/tcp fi elif command -v iptables > /dev/null; then # 使用iptables sudo iptables -A INPUT -p tcp --dport $NEW_PORT -j ACCEPT if [ ! -z "$CURRENT_PORT" ]; then sudo iptables -D INPUT -p tcp --dport $CURRENT_PORT -j ACCEPT fi else echo "未检测到受支持的防火墙工具 (ufw 或 iptables)。请手动更新防火墙规则。" | tee -a $LOG_FILE exit 1 fi # 重启SSH服务 sudo systemctl restart sshd # 修改用户密码 echo "root:$NEW_PASSWORD" | sudo chpasswd # 记录日志 echo -e "$(date +%F_%T) - SSH端口已更改为: $NEW_PORT\n新密码为: $NEW_PASSWORD\n" | sudo tee -a $LOG_FILE # 发送加密邮件 EMAIL_SUBJECT="SSH端口和密码更新 - $SERVER_NAME" EMAIL_BODY="SSH端口已更改为: $NEW_PORT\n新密码为: $NEW_PASSWORD" echo -e "$EMAIL_BODY" | gpg --encrypt --recipient $EMAIL | ssmtp -s "$EMAIL_SUBJECT" $EMAIL # 设置定时任务 CRON_JOB="0 0 */7-15 * * /path/to/update_ssh_password.sh" (crontab -l 2>/dev/null; echo "$CRON_JOB") | crontab -
脚本中的[email protected]记得修改,/path/to/update_ssh_password.sh路径需要修改为脚本的实际地址,否则无法添加定时任务,
4、赋予脚本可执行权限
chmod +x update_ssh_password.sh
文章地址:https://www.cnblogs.com/shenjingwa/p/18290098
标签:服务器端,sudo,EMAIL,SSH,Linux,NEW,定时,PORT,ssh From: https://www.cnblogs.com/shenjingwa/p/18290098