用于纠正大量主机中授权密钥文件权限的 Shell 脚本

用于纠正大量主机中授权密钥文件权限的 Shell 脚本

我有大量系统需要连接到 (hosts.txt) 并在将密钥推送到系统之前更新授权密钥文件的权限。

我继承了可以推送密钥的文件,检查使用一组用户名/密码响应 22 的主机的子网,并检查 ssh 是否可以与我们的密钥连接。其中大部分都是用expect写的。

现在,我需要获取该列表,并根据需要将权限(0700 或 0600?)推送到在子网扫描中响应的主机,以便我们可以将密钥一起推送到系统。

我可以弄清楚 do/while read hosts.txt 部分。我所坚持的部分是通过执行 chmod 0700 ~/.ssh/authorized_key 文件对目标系统进行 ssh 编程(使用 sshpass 或期望密码自动化)。

我真的很想在发生故障时看到一些返回代码(旧的系统管理员有时会让 root 成为 ~/.ssh 目录的所有者,甚至是我们正在调整的标准用户的 ~ 目录的所有者。

我可以手动执行 ssh user@host 。用户(和密码)将保持不变,只是主机根据我们将加载的hosts.txt 文件进行更改。我只是想避免手动执行数百次。完成此操作后,我将能够使用 Pushkey.exp 自动(执行/同时)更新所有已更正的系统。

这是我到目前为止所得到的:

#!/bin/bash
# Permissions fix authorized_keys, using bash
#
# Usage: ./manage_host.sh
# -----------------------------------------------------------------------------
file="/home/user1/bin/hosts.txt"
while IFS= read -r host
do

        expect -f
                spawn ssh remoteuser@$host
                expect "assword:"
                send "ourpasswordhere\r"
        if [ ! -d "~/.ssh"]; then mkdir -p ~/.ssh fi

        if [ ! -f "~/.ssh/authorized_keys."]; then touch ~/.ssh/authorized_keys. fi

        chown -R remoteuser:remoteuser ~/.ssh
        # store exit status of chown
        status=$?

        # Error checking subroutine to post failures on manager server
        if [ $status -ne 0 ]; then echo "'$host' ownership could not be set to svcsis." >> results.txt; fi

        chmod 600 ~/.ssh/authorized_keys

        exit

        ./push_key.exp remoteuser@$host

        ./keycheck.sh $host >>response.txt
done

相关内容