一位同事最近说,“-A如果你想加载你的私钥,你可以使用标志登录服务器。” 我点点头,好像我知道他们在说什么,然后偷偷溜到谷歌上。
看起来几乎就像使用 -Awill 神奇地允许您在没有凭据的情况下登录。手册页:
启用身份验证代理连接的转发。这也可以在配置文件中针对每个主机进行指定。
应谨慎启用代理转发。能够绕过远程主机上的文件权限(对于代理的 UNIX 域套接字)的用户可以通过转发的连接访问本地代理。攻击者无法从代理获取密钥材料,但是他们可以对密钥执行操作,使他们能够使用加载到代理中的身份进行身份验证。
有 6 个描述词,然后是一段深奥的警告。
什么是-A标志做,它是如何工作的,以及如何使用它?
启用身份验证代理连接的转发。
正如你所说,这是一个相当简短的描述,因为它假设了很多先验知识,所以让我们分解它。
... 验证 ...
SSH 连接可以通过多种方式进行身份验证 - 有时当您的登录被拒绝时,您会看到一个失败方法列表。最常见的两种方法是使用密码 - 可以由客户端发送,或以交互方式询问 - 以及使用公私密钥对。
密钥就是我们在这里讨论的内容:服务器知道一组它信任的公钥,你必须通过用它做一些时髦的数学运算来证明你拥有相应的私钥。
... 代理人 ...
您的 SSH 客户端需要知道如何找到私钥,并使用它向服务器进行身份验证。最简单的方法是将密钥存储在已知文件位置,但如果它有密码,则每次使用密钥时都必须输入密码。
“身份验证代理”是一种在您的计算机上运行的软件,它会一次性加载您的所有私钥。当您想连接到服务器时,您的 SSH 客户端可以询问代理它拥有哪些密钥,并使用它们进行身份验证。
... 转发 ... 连接
最后,我们进入代理转发。如果您在 PC 上运行身份验证代理,您可以使用它登录到服务器 A。但是如果您随后需要从服务器 A连接到服务器 B(例如,因为服务器 B 不可公开访问)怎么办?您需要输入密码,或在服务器 A 上存储密钥,甚至在服务器 A 上运行身份验证代理。
代理转发通过让远程服务器上的进程与您 PC 上的身份验证代理对话来简化此方案。它通过在远程服务器上创建一个套接字来实现这一点,该套接字具有正确的权限可以连接到并通过您的 SSH 连接发送消息,然后将这些消息转发到原始代理。
因此,通过代理转发,您的身份验证如下所示:
应谨慎启用代理转发。... 攻击者 ... 可以对密钥执行操作,使他们能够使用加载到代理中的身份进行身份验证。
手册中的警告指出了所有基于代理的身份验证在技术上都是正确的:任何可以与代理交谈的进程都可以使用它来连接到您加载密钥的任何东西。在单用户工作站上,这通常需要恶意软件执行一些自动攻击。代理转发通常发生在多用户服务器上,然而,这会给流氓用户带来额外的风险:如果他们可以访问代理转发套接字(在 Unix 传统中表示为文件系统上的特殊文件),他们可以使用它可以在其他服务器上冒充您。
小智 3
ssh -A 将导致服务器端的守护进程创建身份验证套接字(将由 SSH_AUTH_SOCK 环境变量指向),并允许您将身份验证请求转发到客户端计算机(发起连接的计算机)。
这意味着您来自原始客户端的私钥可用于验证从您连接的服务器发起的进一步 ssh 连接。
该警告基本上意味着可以绕过正常文件系统检查(通常是简单英语的 root)访问您的文件的用户可以操纵您的密钥并获得对您可以访问的系统的访问权限。