如何查看 unix 服务器的所有 SSH 授权密钥

信息安全 验证 linux SSH Unix
2021-08-26 14:55:11

如何从 unix 服务器查看所有授权的 SSH 客户端?

我知道cat ~/.ssh/authorized_keys如果从 root 登录,它会显示授权密钥。其他用户也可以设置自己的授权密钥吗?在这种情况下,我将如何查看所有系统授权密钥?

3个回答

按顺序回答您的问题:

  1. 您可以通过以 root 权限运行以下脚本来查看所有授权密钥。

    #!/bin/bash
    for X in $(cut -f6 -d ':' /etc/passwd |sort |uniq); do
        if [ -s "${X}/.ssh/authorized_keys" ]; then
            echo "### ${X}: "
            cat "${X}/.ssh/authorized_keys"
            echo ""
        fi
    done
    
  2. 任何有效用户都可以创建一个$HOME/.ssh/authorized_keys文件并向其中添加任意数量的公钥。然后,拥有相应私钥的人将能够以该特定用户的身份登录。sshd 遵循的过程如下。当一个新的连接进来时,sshd 会向客户端询问用户名。如果用户名存在于 中/etc/passwd,则 sshd 从 中的第六个字段读取用户主目录的名称/etc/passwd然后它检查.ssh/authorized_keys该用户的主目录中是否存在,以及是否在 .ssh 目录和 authorized_keys 文件上正确设置了权限。如果满足这些条件,sshd 将尝试根据存储在$HOME/.ssh/authorized_keys. 如果客户端拥有匹配的私钥,sshd 将允许它访问。

  3. 您可以使用上面的脚本。

SL Barth 对 root 访问提出了一个很好的观点。允许通过 ssh 进行 root 访问被认为是一种风险。普遍接受的做法是创建一个用户帐户,使用 sudo 或类似工具授予其 root 访问权限,并通过添加以下行/etc/ssh/sshd_config并重新启动 sshd 来禁用通过 ssh 的 root 登录。

PermitRootLogin no

几乎 100% 的机会是,如果您的机器在 Internet 上,“Hail Mary Cloud”将会敲您的门。对于允许基于密码登录的 Linux、iptables 和 sshd,您可能需要安装和配置类似fail2ban的东西,这样攻击者就更难暴力破解您的机器。

而且,由于我们已经在讨论 ssh 密钥,并且因为这是今天发布的,所以您可能希望添加UseRoaming noHost *您的/etc/ssh/ssh_config

cat ~/.ssh/authorized_keys命令向您显示当前登录用户的 authorized_keys 文件。当以 root 身份或使用 登录时sudo,这将为您提供 root 用户的 authorized_keys 文件。

至少在 Ubuntu 上,authorized_keys 文件通常归用户所有。因此当前登录的用户(root 或非 root)可以看到它。
.ssh 目录位于用户的主目录中,通常由用户拥有,具有读、写和执行权限;所以通常用户应该能够确实添加他们自己的 authorized_keys 文件。

要查看所有授权密钥,您只需创建一个迭代所有主目录和 /root 并打印 .ssh/authorized_keys 文件的脚本。显然这个脚本需要 sudo 权限。

附带说明一下,在 Ubuntu 上,root 帐户通常被禁用,因为它是攻击者最喜欢的目标。由于这个原因,它可能不包含authorized_keys 文件。

IMO 最好也检查~/.ssh/authorized_keys2文件。来自https://marc.info/?l=openssh-unix-dev&m=100508718416162&w=2

为了向后兼容,~/.ssh/authorized_keys2 仍将用于身份验证,并且仍从 known_hosts2 读取主机密钥。

来自 Liczyrzepa 的改进代码:

#!/bin/bash
for X in $(cut -f6 -d ':' /etc/passwd |sort |uniq); do
  for suffix in "" "2"; do
    if [ -s "${X}/.ssh/authorized_keys$suffix" ]; then
      echo "### ${X}: "
      cat "${X}/.ssh/authorized_keys$suffix"
      echo ""
     fi;
   done;
done