shell - 通过 http 连接通过本地 unix 套接字访问远程 shell
问题描述
我需要通过远程主机发起的 http 连接通过我的服务器 unix-socket 对远程主机进行 shell 访问。
我知道如何在没有 http 的情况下以直接的方式实现:
- 服务器监听 TCP-PORT 并将其映射到 UNIX-SOCKET:
server# socat TCP-LISTEN:12345 UNIX-LISTEN:/tmp/12345.sock
- 远程主机将 Shell 映射到已启动的 TCP 连接:
remote# socat EXEC:sh,pty,stderr,setsid,sigint,sane TCP:my.server.com:12345
- 要连接远程 shell,我可以这样做:
server# socat FILE:`tty`,raw,echo=0 UNIX-CONNECT:/tmp/12345.sock
上述3个步骤的架构:
远程[shell] -> tcp:my.server.com:12345 :: server :: unix:/tmp/12345.sock <- server [tty]
接下来我需要在remote和server之间建立 HTTPS 。第 1 步会在 http 请求上对服务器执行什么操作。所以我想要这样的模式:
远程[shell] -> https://my.server.com:443/ shell :: server [ open unix: /tmp/12345.sock on Request /shell ] :: unix:/tmp/12345.sock <- server [tty]
我使用 ngnix,据我所知,LUA 可以在其中工作。但是我没有足够的LUA知识来实施这个计划。
更新 2020.02.12
我发现必须使用 websocket。所以 Schema 看起来像这样:
远程 [shell] -> WebSocket 代理客户端-> https://my.server.com:443/shell :: Web 服务器 -> WebSocket 服务器[开始监听 unix:/tmp/12345.sock] :: unix:/tmp /12345.sock <- 服务器 [tty]
WebSocket代理Client和WebSocketServer如何制作?
解决方案
推荐阅读
- python - 从python中的矩阵中提取一列
- flutter - 为什么使用 context.select 代替 context.watch 会导致范围错误?
- solidity - 在测试网上使用 Remix 部署合约时出现问题
- javascript - 需要角度反应形式切换验证?
- reactjs - 如何从material-ui控制TablePagination
- python - 从python中的列表项末尾删除空格
- python - 我得到一个 matmul:输入操作数 1 不匹配...错误...正文中的完全错误
- python - 如何以编程方式将反斜杠引号转换为双反斜杠引号?
- url - 如何在 scss 文件中调用像“http://...”这样的 url?
- javascript - 如何使用 ARGS[] 在 discord.js v12.5.3 中编写 clear 命令