【问题标题】:How can i get all the users and their authorize_key in linux using shell script?如何使用 shell 脚本在 linux 中获取所有用户及其 authorize_key?
【发布时间】:2016-11-13 01:06:06
【问题描述】:

我正在使用以下脚本来获取密钥计数。但它不起作用,是否存在任何其他方法?或者我应该如何修复错误?

#!/bin/bash
for i in `cat /etc/passwd` ; do\
    echo $i |\
    awk -F: { print `grep -o "ssh-rsa" <<< (cat /home/"$1"/ .ssh/authorized_keys ) | wc -l` }  
done

【问题讨论】:

  • 你想只显示所有的键吗?或者你需要显示哪个用户名有哪些键?
  • 为什么对这个投反对票?
  • 通常.ssh 文件夹包含已知主机、服务器的公钥和私钥。
  • 我不知道为什么投反对票。 @sjsam
  • @Praveensivadasan 我相信这个问题符合[ mcve ] 提到的要求。不知道为什么这被否决了。没有评论就投反对票的人剥夺了其他人很好的学习机会:(

标签: linux bash shell centos


【解决方案1】:

如果你只想显示键的数量,你可以这样做:

for homedir in $(awk -F':' '{print $6}' /etc/passwd); do
    [[ -f "${homedir}/.ssh/authorized_keys" ]] && cat "${homedir}/.ssh/authorized_keys"
done

显示每个文件的计数:

for homedir in $(awk -F':' '{print $6}' /etc/passwd); do
    [[ -f "${homedir}/.ssh/authorized_keys" ]] && wc -l "${homedir}/.ssh/authorized_keys"
done

按用户名显示计数:

while IFS='' read -r line || [[ -n "$line" ]]; do
    USERNAME="$(echo "$line" | awk -F: '{print $1}')"
    HOMEDIR="$(echo "$line" | awk -F: '{print $6}')"

    if [[ -f "${HOMEDIR}/.ssh/authorized_keys" ]]; then
        COUNT="$(grep -c 'ssh-' "${HOMEDIR}/.ssh/authorized_keys")"
    else
        COUNT=0
    fi

    echo "${USERNAME} has ${COUNT} keys."
done < "/etc/passwd"

【讨论】:

  • 感谢回复,我要每个用户的密钥数。
  • 感谢回复,是否可以像这样打印计数 awk -F: ' { print "\t\t${COUNT}\n " "\t\t" } ',因为我遇到了错误。
  • 没问题。为此使用awk 是没有意义的。为什么不直接使用echo
  • 很高兴为您提供帮助,没问题! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2019-09-06
  • 2016-02-02
  • 2020-07-28
  • 2018-11-27
相关资源
最近更新 更多