我是 Bash 脚本的新手,我正在尝试创建一个脚本,该脚本会遍历多台机器的所有用户主目录,以从 authorized_keys 中删除条目。删除条目很容易,但要从所有现有主目录中删除它,我必须访问机器,获取主目录并创建列表,或者逐个执行。我想动态地执行此操作。
状况
- 这些机器可能没有相同的用户,但这应该不是问题。
- 我不能使用静态列表,因为用户可能会改变(新用户、用户删除)。
- 有些用户是本地的,有些是挂载在/home下的NFS。
- 我必须从其中一些家庭中删除给定用户的公钥。用户公钥可能存在于所有家庭中,也可能只存在于几个家庭中,这就是为什么我需要在所有现有家庭中运行脚本。我想避免用户使用其公钥通过 ssh 连接到此机器上的本地用户。
我能想到的唯一“解决方案”是从密码中为本地家庭创建一个列表,然后从 fstab 中将 NFS 用户添加到列表中,但对于这样的任务来说,这似乎相当复杂。
有没有更简单的方法来为机器中所有现有的 $home 运行脚本?
为了删除条目,我使用 sed,这已经过测试并且有效。当我手动定义要从中删除条目的主页时,该脚本可以完美运行。
谢谢。
编辑:好的。这是一个巨大的错误。我说的是authorized_keys。我不知道为什么我写了know_hosts
答案1
怎么样 ...
#!/usr/bin/env bash
for user in $(getent passwd | cut -f1 -d: );
if [[ -f "$user/.ssh/authorized_keys" ]]; then
... your sed command ...
done
users=(/nfsshares/*)
for user in "${users[@]}"; do
if [[ -f "$user/.ssh/authorized_keys" ]]; then
... your sed command ...
fi
done