在 SSH 凭证转发 ( ssh -A
) 中,远程 ssh 代理是否存储要转发的凭证,或者远程 ssh 代理是否针对每个请求根据需要联系本地 ssh 代理来获取凭证?
这在以下场景中很重要:1.ssh -A
到远程主机,2. 运行需要 SSH 凭据的长时间运行的脚本(可能到scp
其他地方的某些资源),3. 断开与远程主机的连接。
如果凭证存储在远程,这可能会成功,否则,脚本将失败,因为断开连接后可能无法访问本地 ssh 代理。
答案1
ssh -A
通过SSH 代理转发不是将(未加密的)私钥存储在远程系统上。相反,它会在远程系统上设置一个套接字,该套接字通过打开的 ssh 会话隧道传输回ssh-agent
原始主机上运行的用户。远程端套接字的位置将存储在环境变量的值中SSH_AUTH_SOCK
,可能类似于:/tmp/ssh-HASH/agent.PID
因此,你将无法使用代理转发来执行你想要的操作简单的这种情况,但除非您的原始主机将完全离线(例如您的笔记本电脑),否则您可以保持连接打开,仅用于ssh-agent
转发。像这样:
ssh -fTA REMOTE "sleep infinity"
(另外:我尝试过ssh -fNTA ...
,但它不会创建远程代理套接字,即使我在转发端口时成功使用它 - 但不知道为什么)。
警告:由于代理转发的设计,任何root
在远程系统上有权限的人都可以读取您的未加密通过套接字将私钥从本地/源系统上的代理中导出。这有风险,但不会破坏交易,而且肯定比将密码编码在文件中要好。