如何从Ubuntu Server 14.04 VM中检索一个没有FTP,SCP或NFS的目录(文件夹)

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

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

目前我只有一个想法,即将USB闪存驱动器插入运行本机的ESXi主机,然后将文件复制到该主机。 但是,这台机器没有USB控制器,而且由于它是一台生产机器,所以在工作date间我不能closures它,所以我只能在工作时间后才能做到这一点。 因此, (TLDR 🙂 我想知道如果其他人有任何其他想法如何从Ubuntu服务器14.04虚拟机检索目录没有FTP,SCP,挂载NFS共享,或安装任何新的文件或软件。

编辑:没有期待所有的伟大的回应。 删除我现在接受的答案。 当我有机会通过这些反应和实验时,我会把它分配到别处。

除了说出所有没有的东西外,说它所拥有的东西呢? 文件夹有多大,有多less可用磁盘空间?

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

  1. 如果ESXi 5.0或更高版本,并且服务器已安装VMware Tools,请使用PowerCLI和Copy-VMGuestFile cmdlet从中复制文件。
  2. 这是一个虚拟机,在某个孤立的地方还原它的备份,引导它,让你喜欢的文件的所有变化。
  3. 这是一个虚拟机,恢复磁盘的备份,并下载并挂载VMDK文件。

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

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

    1. 它是否安装了SSH客户端? 将它们从服务器SCP传送到远程SSH服务器
    2. 把它们发送给你自己
    3. WGET / Curl将它们发布到远程Web服务器上传
    4. TFTP出来
  3. 它是否安装了netcat( nc )? 你可以通过pipe道tar | nc 并将数据stream传输到一个套接字,并使用nc | tar 在networking上的另一台计算机上接收nc | tar 。 例

  4. 如果是典型的Linux安装,它可能有Python,Python自带SimpleHTTPServer模块,默认将当前目录作为网站服务,在不同的端口上运行到主要networking服务器并从那里下载文件。
  5. 脚本将它们作为二进制blob填充到内存表中,然后从客户端select它们可能是相关的
  6. 服务器系统日志到远程目标? Base64对这些文件进行编码,然后将它们stream式传输到系统日志中… ymmv。

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

 python -m SimpleHTTPServer 9999 

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

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


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

 nc -lp 9999 > files.tar.gz 

并在主机上运行:

 tar cz /path/to/directory > /dev/tcp/1.2.3.4/9999 

虽然这确实创build了一个归档文件,但归档文件永远不会写入磁盘 – 它直接通过networking进行stream式处理,因此不会有磁盘空间不足的风险。

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

如果没有官方备份,则应该有,这需要sorting – 但是,如果磁盘存储在LVM分区上,则可能可以创build快照分区,然后从那里复制磁盘,就像它是一个备份

那么,已经有了一个可以接受的答案,另外,利用它是一个Web服务器这个事实,还有一个真正的好的答案。

但是我只想指出一个我认为不太好解决的攻击行,就是如果你有命令行访问的话,你可能使用了一个terminal程序,而且其中大部分都有一些logging滚动的东西的方法屏幕。

所以也许这个答案可以帮助一个没有运行web服务器的人。 基本上可以称为使用常见的Linux工具的现场权宜文件传输

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

 tar czf - folderpath | uuencode temp.tar.gz 

要么

 tar cvf - folderpath | base64 

会将大量的文本转储到您的terminal。 如果你可以捕获它作为回滚,在文本编辑器中清理它,然后解码为二进制文件,你将有一个tar.gz的文件夹。 当然,你可能需要做一些事情,比如将你的卷轴重新设置成大量的线条。

我想你甚至可以用xxd来编码和解码。

如果你不能一次性回滚,你甚至可以用headtail分割它,并一次发送一个块。

详细信息取决于您可以访问哪些实用程序以及您希望通过控制台数据stream来压缩数据的工作量

(OP应该使用Web服务器)

虽然这是ESXi虚拟机,但您必须将另一个虚拟磁盘连接到该虚拟机。 然后移动一切非关键的磁盘和安装工具的select – ssh / scp / rsync /其他一切。

如果你能够在服务器上运行shell命令,那么你可以用正确的参数运行tar来创build一个包含这些文件的.tar (或.tar.gz )压缩文件,然后你可以运行curlwget来上传压缩文件到https://transfer.sh/ 。 从另一台计算机上,您可以检索存档。

如果您无法在服务器上运行shell命令,则应该询问服务器的sysadmin或DBA如何运行命令。 (你提到服务器运行一个重要的数据库,所以必须有一种方法来运行维护任务。)

如果您能够上传.php文件并使其运行(即提供网页),那么您可以find一个admin .php脚本,该脚本公开目录树,上传并运行它。

从另一个主机,做:

  dd if=/dev/zero of=some-file.img bs=1k count=1000 mkfs.fat some-file.img 

把文件some-file.img放在桌面上。 VMware客户端应该能够将其安装为软盘驱动器。

  • 调整count=1000以适应您的需要。

在数据存储上创build一个新的Vmdk。 在运行时将其附加到VM上,在VM上发现它,对其进行分区,在其上创build文件系统,将其挂载到挂载点上,然后将数据复制到VM上。 一旦完成,卸载它,断开Vmdk,然后连接到你有ssh / sftp / nfs访问的虚拟机。 然后发现,安装并复制到需要的地方。