关于在一个只有web终端的服务器上下载某个文件

前提:这个服务器只能在提供的web终端上访问,不能ssh、ftp、sftp、rzsz,终端只展示1000行,现在需要取一个一万行的日志文件下来
我的解决思路:将日志文件压缩为gz→base64转为编码形式→在屏幕上cat出来→复制到本地→转为gz压缩包→解压
原文件:500k,压缩后的gz压缩包:15k,base64长度:300+行
大家有没有更好的思路了?

命令行上传就行了,比如我就是用rclone来进行文件的同步。

不行 机器不连外网,没有能用的命令行工具

如果远程服务器支持 curl 命令,且本地主机与远程服务器在同一局域网内,可在本地主机上开一个 WebDAV 服务。然后,利用 curl 命令将远程服务器上的文件通过 WebDAV 发送给本地主机。

WebDAV 服务器可以用 dufs,开箱即用,比较简单。

这篇文章里也介绍了用 curl 向 WebDAV 服务器上传文件的方法。

curl -T path-to-file http://127.0.0.1:5000/new-path/path-to-file

这个服务器上有nginx这类服务么?如果有的话直接把日志文件复制到nginx下,直接使用浏览器下载。

不在同一局域网上,只提供web形式的终端访问

浏览器访问不到他,登陆的这个web终端是另一个地址提供的,web终端站点和目标服务器之间是能连接的,但是我只有访问web终端这台服务器的web的权限,不能通过他来转发ssh

你的意思是nginx服务器和后端服务器是分离的么?那我是想不到什么好方法了。除非写一个后门get方法,浏览器调用的时候返回日志 :yum:

楼主的办法挺不错的, 好思路

要不试试让运维换一家更专业一点的堡垒机?比如jumpserver


在当前环境下也不是没有更好的方案,比如说:

  • 将gz换成压缩率更好的xz,不过有些系统默认没带xz环境,所以只是一个可选项
  • 然后base64因为会把原数据放大/3*4倍,所以可以考虑采用base85或者base91/base92这种放大程度更小的编码
  • 可以考虑写个智能一点的shell脚本,根据当前窗口大小计算目标行数(比如1000-10)可以输出多少字符,然后每次输出这么多,回车继续输出(这个功能只在输出结果特别多的时候有用)

倒不是堡垒机不行,而是客户事多,不给权限还要干活。我们就不得不研究一点神奇操作了。建议甚好,我下次传大文件可能要优化一下脚本了。
不过我还有个思路不知道可不可行:用chrome插件或者油猴脚本,获取 WebScoket请求的内容,然后再生成gz文件,以前没写过油猴脚本

有没有nginx、apache之类的http服务?这两个很常见,可以开webdav,然后就能下载了

油猴脚本 hook websocket 是可行的方案,不过需要做好数据特征标记,以及需要了解堡垒机本身在传输时有没有进行什么编码的操作。

1 个赞

用tmux,再试试翻页呢