如何在没有 FTP、SCP 或 NFS 的情况下从 Ubuntu Server 14.04 VM 检索目录(文件夹)

Bra*_* S. 4 files file-sharing

我有点棘手。几个月前我开始了我目前的工作,我有一个 web 应用程序在 apache web 服务器(一个简单的基于 PHP 的服务器)上运行。我需要更新此代码以修复应用程序中的一些问题,并且我希望将代码放入适当的源代码环境(IE。版本控制)。

跳过不相关细节的解释,我需要从 Ubuntu Server 14.04 (CLI) 虚拟机检索目录(文件夹),而不需要向机器添加或删除任何软件或其他文件。目前机器上没有 FTP 或 SCP 服务器,所以我不能使用它们。而且它缺少 /sbin/mount.nfs 帮助程序来允许挂载 NFS 共享(我们这里有一系列共享文件夹,如果我可以挂载 NFS 共享,我可以用来检索文件)。

目前我只有一个想法,就是将 U 盘插入运行机器的 ESXi 主机,然后将文件复制到该主机中。但是,这台机器没有USB控制器,而且因为它是生产机器,我不能在工作日关闭它来安装一个,所以我只能在下班后才能这样做。因此,(TLDR:) 我想知道是否还有其他人对如何从 Ubuntu Server 14.04 VM 检索目录而不使用 FTP、SCP、挂载 NFS 共享或安装任何新文件或软件有任何其他想法。

编辑:没想到所有伟大的反应。暂时删除我接受的答案。当我有很好的机会完成这些响应和实验时,我会将它分配到其他地方。

Tes*_*ler 37

除了说它没有的所有东西,还说它有的东西呢?文件夹有多大以及有多少可用磁盘空间?

假设您根本无法访问 CLI,即使是从控制台:

  1. 如果是 ESXi 5.0 或更高版本,并且服务器安装了 VMware Tools,请使用 PowerCLI 和Copy-VMGuestFile cmdlet 从中复制文件。
  2. 这是一个虚拟机,在某个隔离的地方恢复它的备份,启动它,对文件进行所有你喜欢的更改。
  3. 它是一个虚拟机,恢复磁盘的备份并下载并挂载 VMDK 文件。

即使您没有 SSH 访问权限,假设您有某种访问权限来键入命令并通过 VM 控制台管理服务器:

  1. 这是一个网络服务器,通过浏览器下载文件
    1. 也许将它们 gzip 到 /tmp(内存)和符号链接到 webserver 文件夹以避免更改 Apache 配置
  2. 是否安装了FTP客户端?FTP 从服务器到其他地方并上传文件。

    1. 是否安装了 SSH 客户端?将它们从服务器 SCP 到远程 SSH 服务器
    2. 通过电子邮件将它们发送给自己
    3. WGET/CurlPOST它们到远程 Web 服务器上传
    4. TFTP 出来
  3. 是否nc安装了netcat ( )?您可以通过管道tar | nc将数据流式传输到套接字,并nc | tar在网络上的另一台计算机上使用以进行接收。例子

  4. 如果是典型的 Linux 安装,它可能带有 Python,Python 带有SimpleHTTPServer模块,该模块默认将当前目录作为网站提供服务,在与主 Web 服务器不同的端口上运行该模块并从那里下载文件。
  5. 将它们作为二进制 blob 填充到您的数据库中的脚本到内存表中,然后从可能相关的客户端中选择它们
  6. 服务器系统日志是否到远程目标?Base64 对文件进行编码并将它们流式传输到系统日志中... ymmv 读回它。


小智 9

如果服务器安装了 Python——它几乎肯定会安装;Python 被足够多的系统服务使用,它几乎可以保证存在——您可以启动一个 HTTP 服务器来使用以下命令从当前目录提供文件:

python -m SimpleHTTPServer 9999
Run Code Online (Sandbox Code Playgroud)

在端口 9999 上启动 Web 服务器。

请记住,此服务器上没有访问控制,因此如果该服务器可供公众访问,您可能不想这样做。


另一种选择是通过网络通过管道传输 tar 存档。假设您有另一台可从 Ubuntu 服务器访问的 IP 地址为 1.2.3.4 的计算机(主机名“client”),您可以通过在客户端上运行以下命令来执行此操作:

nc -lp 9999 > files.tar.gz
Run Code Online (Sandbox Code Playgroud)

并在主机上运行:

tar cz /path/to/directory > /dev/tcp/1.2.3.4/9999
Run Code Online (Sandbox Code Playgroud)

虽然这确实创建了一个存档,但存档永远不会写入磁盘——它直接通过网络流式传输——因此不存在磁盘空间不足的风险。


Mic*_*haw 6

虚拟机磁盘希望以定期备份的方式存储 - 因此您可以将备份还原到新位置,然后将 VM 磁盘用作新 VM 中的第二个磁盘。

如果没有官方备份,那么应该有,这需要排序 - 但是如果磁盘存储在 LVM 分区上,您可以创建一个快照分区,然后从那里复制磁盘,好像它是一个备份


inf*_*xed 5

好吧,已经有一个公认的答案,此外,利用它是一个 Web 服务器这一事实,确实有一个很好的答案。

但只是指出我认为没有解决的攻击线是如果您有命令行访问权限,您可能正在使用终端程序,并且其中大多数都有某种方式来记录滚动的内容屏幕。

因此,对于没有运行 Web 服务器的人来说,这个答案可能会在未来有所帮助。基本上可以称为使用常见 Linux 工具进行现场权宜之计的文件传输

可以将文件夹作为 ASCII 发送。tar 文件夹,使用多种可能性将其从二进制转换为 ASCII。然后在运行 terman 程序的机器上,从回滚中恢复 ASCII blob,并从中提取二进制文件。

tar czf - folderpath | uuencode temp.tar.gz
Run Code Online (Sandbox Code Playgroud)

或者

tar cvf - folderpath | base64
Run Code Online (Sandbox Code Playgroud)

将大量文本转储到您的终端。如果您可以将其捕获为回滚,请在文本编辑器中对其进行清理,然后将其解码回二进制文件,您将拥有tar.gz该文件夹的一个。当然,您可能需要执行一些操作,例如将滚动条重新设置putty为大量行。

我认为如果您愿意,您甚至可以xxd用来进行编码和解码。

如果您不能一次性将其放入回滚中,您甚至可以使用and 将其分解headtail一次通过一个块发送 ASCII。

详细信息取决于您可以访问哪些实用程序以及您希望通过控制台数据流压缩该数据所付出的努力

(OP 应该使用网络服务器)