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