如何从 unix 服务器查看所有授权的 SSH 客户端?
我知道cat ~/.ssh/authorized_keys
如果从 root 登录,它会显示授权密钥。其他用户也可以设置自己的授权密钥吗?在这种情况下,我将如何查看所有系统授权密钥?
如何从 unix 服务器查看所有授权的 SSH 客户端?
我知道cat ~/.ssh/authorized_keys
如果从 root 登录,它会显示授权密钥。其他用户也可以设置自己的授权密钥吗?在这种情况下,我将如何查看所有系统授权密钥?
按顺序回答您的问题:
您可以通过以 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
任何有效用户都可以创建一个$HOME/.ssh/authorized_keys
文件并向其中添加任意数量的公钥。然后,拥有相应私钥的人将能够以该特定用户的身份登录。sshd 遵循的过程如下。当一个新的连接进来时,sshd 会向客户端询问用户名。如果用户名存在于 中/etc/passwd
,则 sshd 从 中的第六个字段读取用户主目录的名称/etc/passwd
。然后它检查.ssh/authorized_keys
该用户的主目录中是否存在,以及是否在 .ssh 目录和 authorized_keys 文件上正确设置了权限。如果满足这些条件,sshd 将尝试根据存储在$HOME/.ssh/authorized_keys
. 如果客户端拥有匹配的私钥,sshd 将允许它访问。
您可以使用上面的脚本。
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 no
到Host *
您的/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