将远程 authorized_keys 文件列表分配给本地变量

将远程 authorized_keys 文件列表分配给本地变量

我想将远程授权密钥文件列表分配给本地变量。

INCLUDE=$(ssh myhost.mydomain.com "for Z in `awk -F : '{print $1}' /etc/passwd`; do INCLUDE+=\"/home/${Z}/.ssh/authorized_keys \"; done; echo $INCLUDE")

我怎样才能正确地转义上述命令以使其成为有效请求?

答案1

使用此语句,您会得到一些奇怪的结果,如 /home/bin、/home/root 或 /home/daemon。

for Z in `awk -F : '{print $1}' /etc/passwd`; do INCLUDE+="/home/${Z}/.ssh/authorized_keys "

ls /home/*/.ssh/authorized_keys更合适。

因此最终的脚本可能是:

INCLUDE=$(ssh [email protected] "ls /home/*/.ssh/authorized_keys")

但是你需要以 root 身份连接到 ssh-server

答案2

sgeorge-mn:~ sgeorge$ cat awk_ssh.sh 
ssh -q [email protected] <<'HERE'
cat /etc/passwd | grep '/bin/bash'| awk -F: '{system("ls /home/"$1"/.ssh/authorized_keys")}'
HERE

sgeorge-mn:~ sgeorge$ INCLUDE=$(bash awk_ssh.sh)
[email protected]'s password: 

sgeorge-mn:~ sgeorge$ echo $INCLUDE
/home/root/.ssh/authorized_keys /home/suku/.ssh/authorized_keys

答案3

最容易出错的方法实际上是从 passwd 数据库中获取每个用户的 HOME 目录并检查其中的authorized_keys文件。另请注意,openssh 支持authorized_keysANDauthorized_keys2文件。

该命令应该给出这样的列表:

getent passwd | awk -F: '$6!=""{print $6}' | \
    xargs -rI{} find {} -maxdepth 2 -mindepth 2 \
        -path \*/.ssh/\* \
        \( -name authorized_keys -o -name authorized_keys2 \) \
        -type f 2>/dev/null

如果要通过 ssh 执行它,则必须适当转义引号。但是,您可以将其放入脚本文件中,并将其提供给/bin/sh远程端:

<scriptfile ssh remote.host /bin/sh

相关内容