批量查询linux主机用户密码是否过期的shell脚本,除了root用户
时间: 2024-05-16 21:17:47 浏览: 195
以下是一个简单的 shell 脚本,可以批量查询 Linux 主机中非 root 用户的密码是否过期:
```sh
#!/bin/bash
# 定义需要查询的主机列表
HOSTS=("host1" "host2" "host3")
# 定义需要查询的用户名列表
USERS=("user1" "user2" "user3")
# 循环遍历主机和用户列表,进行查询
for host in "${HOSTS[@]}"
do
for user in "${USERS[@]}"
do
# 获取用户密码过期时间
password_expiry=$(ssh $host chage -l $user | grep "Password expires" | awk '{print $4}')
# 判断密码过期时间是否为空,如果为空则表示用户不存在
if [[ -z "$password_expiry" ]]; then
echo "$user does not exist on $host"
else
# 获取当前时间和密码过期时间的时间戳
current_timestamp=$(date +%s)
expiry_timestamp=$(date -d "$password_expiry" +%s)
# 计算距离密码过期的天数
days_left=$((($expiry_timestamp - $current_timestamp)/(60*60*24)))
# 判断距离密码过期的天数是否小于等于7天,如果是则输出警告信息
if [[ $days_left -le 7 ]]; then
echo "WARNING: $user's password on $host will expire in $days_left days."
else
echo "$user's password on $host is valid for another $days_left days."
fi
fi
done
done
```
在使用该脚本之前,请确保在每台主机上已经配置了 SSH 公钥认证,且当前用户具有对目标主机的访问权限。另外,为了保证脚本的安全性,建议将需要查询的主机和用户列表存储在一个配置文件中,并使用 `source` 命令导入到脚本中,避免直接在脚本中存储敏感信息。
阅读全文