批量查询 Linux 主机中非 root 用户的密码是否过期
时间: 2024-05-06 09:17:46 浏览: 118
可以使用以下命令来批量查询 Linux 主机中非 root 用户的密码是否过期:
```
for host in $(cat hostlist.txt); do
echo "Checking password expiration on $host"
ssh $host 'sudo chage -l $(getent passwd {1000..60000} | cut -d: -f1 | grep -v root)' | grep "Password expires"
done
```
其中,`hostlist.txt` 是一个包含需要查询的主机名或 IP 地址列表的文件。该命令会遍历列表中的每个主机,通过 SSH 登录并执行 `chage` 命令查询非 root 用户的密码过期情况。如果密码即将过期或已经过期,则会输出相应的提示信息。
需要注意的是,该命令要求当前用户具有 SSH 登录到这些主机的权限,并且需要提供 sudo 密码以执行 `chage` 命令。如果需要输入 sudo 密码多次,可以在循环外部添加一个 `sudo -v` 命令来提前获取权限。
相关问题
批量查询linux主机用户密码是否过期的shell脚本,除了root用户
以下是一个简单的 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` 命令导入到脚本中,避免直接在脚本中存储敏感信息。
阅读全文