我有一个遗留协议,不支持身份验证,不支持会话,只是简单明了地做任何你想要的命令,这些命令以明文形式从客户端发送到服务器,服务器愉快地执行它收到的任何内容,就像 ron burgundy 读到的那样从自动提示..
一种解决方案是使用 tls 重新实现遗留服务。这会起作用,但它可能是一个痛苦的世界,我希望能找到更容易的东西。我知道更喜欢 tls 而不是 ssh 的论点,在这种情况下,还有一些论点是更喜欢简单的大改进而不是更大风险的重新实现,这是对轻松获胜的边际改进。
我正在考虑:
- 使用 /etc/passwd shell=/usr/bin/legacy-protocol-handler 创建一个“协议用户”
- 客户端通过 ssh 连接发送命令并将命令写入 shell
- sshd 执行协议处理程序(用户 shell)并传递命令
- 协议处理程序处理命令并发送回响应,挂断
- sshd 编组响应并通过网络发送
- 这解决了身份验证和传输加密,我几乎没有更改协议处理程序中的代码
这个一般的想法可能比上面更容易,unix用户系统仅用于执行自定义协议处理程序而不是shell..我找不到会在端口上侦听的命令,进行身份验证/加密繁重的工作,并为每个连接执行一个协议处理程序,例如 ssh-listen --port 1224 --accept-only-this-user publickey.bin --execute /usr/bin/legacy-protocol-handler
问题:
- 这是一个合理的解决方案吗(似乎我没有按预期使用 sshd ..)
- 这种方法的缺点是什么
- 有没有更好的方法来为类似的努力获得可观的安全性
- 有没有类似的方法我可以使用 tls 侦听器而不是通过 sshd