我的场景:
localhost: contains my private key
serverA: contains my public key
serverB: contains my public key
我登录到服务器A并执行一些操作,其中涉及从复制一些文件服务器B因为我用一个常用的用户名登录,所以我不希望我的私钥存储在服务器A。这意味着,在理想情况下,我能够仅通过 ssh 会话发送我的私钥并使其可用ssh-agent
,然后我从服务器A到服务器B,我的私钥是从内存中读取并用于验证服务器B。这可能吗?
答案1
是的,这就是ssh -A
标志的作用。
这仅适用于已添加到ssh-agent
您的运行中的密钥当地的机器。如果您在连接时必须输入密码serverA
(或仅使用无密码密钥),那么这将不起作用
从手册页:
-A
启用身份验证代理连接的转发。这也可以在配置文件中针对每个主机进行指定。应谨慎启用代理转发。能够绕过远程主机(对于代理的 UNIX 域套接字)文件权限的用户可以通过转发的连接访问本地代理。攻击者无法从代理获取密钥材料,但是他们可以对密钥执行操作,使他们能够使用加载到代理中的身份进行身份验证。
-A
禁用身份验证代理连接的转发。
不过,您可能需要注意引用中的警告。-A
不会暴露您的密钥,但它确实允许任何人对 ssh-agent 套接字进行读/写访问在服务器上如果他们知道在哪里寻找套接字,则可以使用您的凭据。由于您使用普通用户登录,因此有权访问该用户的其他任何人都可以访问你的代理人。
我认为SSH_AUTH_SOCK
服务器上的只是将流量直接转发到在您的服务器上运行的 ssh-agent当地的机器。