不定时修改Linux服务器端口和密码

最近总是不想动,服务器的安全又不得不考虑,有时候还会忘记修改服务器的端口和密码,就诞生了下面的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
AuthUser=your-email@example.com
AuthPass=your-email-password
UseSTARTTLS=YES

3、Shell脚本,

#!/bin/bash

# 配置
EMAIL="your-email@example.com"
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 -

脚本中的your-email@example.com记得修改,/path/to/update_ssh_password.sh路径需要修改为脚本的实际地址,否则无法添加定时任务,

4、赋予脚本可执行权限

chmod +x update_ssh_password.sh

文章地址:https://www.cnblogs.com/shenjingwa/p/18290098

posted @ 2024-07-08 16:04  神经蛙  阅读(31)  评论(0编辑  收藏  举报