Como posso recuperar um diretório (pasta) da VM do Ubuntu Server 14.04 sem FTP, SCP ou NFS

4

Estou em uma situação um pouco complicada. Eu comecei meu trabalho atual há alguns meses, e eu tenho um aplicativo da web em execução em um servidor web apache (um simples baseado em PHP). Eu preciso atualizar este código para corrigir alguns problemas no aplicativo e gostaria de obter o código em um ambiente de código-fonte adequado (IE. Version Control).

Ignorando a explicação de detalhes irrelevantes, eu preciso recuperar um diretório (pasta) de uma Máquina Virtual do Ubuntu Server 14.04 (CLI) sem adicionar ou remover qualquer software ou outros arquivos para a máquina . Atualmente, a máquina não tem nenhum servidor FTP ou SCP, por isso não posso usá-los. E está faltando o programa auxiliar /sbin/mount.nfs para permitir a montagem de um compartilhamento NFS (temos aqui uma série de pastas compartilhadas que eu poderia usar para recuperar os arquivos se eu pudesse montar um compartilhamento NFS).

Atualmente, tenho apenas uma ideia, que é inserir uma unidade flash USB no host ESXi que está executando a máquina e copiar os arquivos para ela. No entanto, a máquina não tem um controlador USB e, como é uma máquina de produção, não consigo desligá-la durante a jornada de trabalho para instalá-la, portanto, só poderei fazer isso depois do horário comercial. Devido a isso, (TLDR :) eu queria saber se alguém tinha outras idéias sobre como recuperar um diretório de uma máquina Ubuntu 14.04 VM sem FTP, SCP, Montando um compartilhamento NFS, ou instalar qualquer novo arquivo ou software.

Editar: não esperava todas as ótimas respostas. Removendo minha resposta aceita por agora. Vou designá-lo em outro lugar quando tiver uma boa chance de passar por essas respostas e experimentar.

    
por Brandon S. 28.07.2016 / 15:09

8 respostas

37

Além de dizer todas as coisas que não tem, que dizer as coisas que tem? Qual é o tamanho da pasta e quanto espaço livre em disco há?

Supondo que você não tenha acesso ao CLI, mesmo a partir do console:

  1. Se for o ESXi 5.0 ou superior, e o servidor tiver o VMware Tools instalado, use o PowerCLI e o Copiar-VMGuestFile para copiar arquivos dele.
  2. É uma VM, restaure um backup dele em algum lugar isolado, inicialize-o, faça todas as alterações que você deseja obter nos arquivos.
  3. É uma VM, restaura um backup do disco, faz o download e monta o arquivo VMDK.

Mesmo que você não tenha acesso SSH, supondo que você tenha algum tipo de acesso para digitar comandos e gerenciar o servidor por meio do console da VM:

  1. É um servidor web, baixe os arquivos através de um navegador
    1. Talvez gzip-los em / tmp (memória) e link simbólico na pasta do servidor web para evitar a mudança de configuração do Apache
  2. Tem o cliente de FTP instalado? FTP do servidor para outro lugar e fazer o upload dos arquivos.

    1. Possui o cliente SSH instalado? SCP-los do servidor para um servidor SSH remoto
    2. Envie-os por e-mail para você
    3. WGET / Curl POST deles para um upload de servidor da web remoto
    4. TFTP-los
  3. Possui o netcat ( nc ) instalado? Você pode canalizar tar | nc e transmitir os dados para um soquete e usar nc | tar em outro computador na rede para receber. exemplo

  4. Se é uma instalação típica do Linux, pode ter Python, o Python vem com Módulo SimpleHTTPServer cujo padrão é servir o diretório atual como um site, executá-lo em uma porta diferente do servidor principal e baixar os arquivos a partir dele.
  5. Script inserindo-os em seu banco de dados como um blob binário em uma tabela na memória e, em seguida, selecionando-os de um cliente pode ser relevante
  6. O servidor syslog para um destino remoto? Base64 codifica os arquivos e os transmite para o syslog ... ymmv ao lê-lo de volta.
por 28.07.2016 / 16:10
9

Se o servidor tiver o Python instalado - o que quase certamente ocorrerá; O Python é usado por serviços de sistema suficientes que estão praticamente garantidos - você pode inicializar um servidor HTTP para servir arquivos do diretório atual usando o comando:

python -m SimpleHTTPServer 9999

para inicializar um servidor da Web na porta 9999.

Tenha em mente que não há controles de acesso neste servidor, portanto, você pode não querer fazer isso se o servidor estiver acessível ao público.

Outra opção será canalizar um arquivo tar pela rede. Supondo que você tenha outro computador (nome de host "cliente") no endereço IP 1.2.3.4 que pode ser acessado pelo servidor Ubuntu, você pode fazer isso executando o seguinte comando no cliente:

nc -lp 9999 > files.tar.gz

e executando no host:

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

Embora isso crie um arquivo, o arquivo nunca é gravado em disco - ele é transmitido diretamente pela rede -, portanto, não há risco de ficar sem espaço em disco.

    
por 29.07.2016 / 06:53
6

Esperamos que o disco da máquina virtual seja armazenado de forma que seja feito backup regularmente - para que você possa restaurar o backup em um novo local e, em seguida, usar o disco da VM como um segundo disco em uma nova VM.

Se não houver backups oficiais, deve haver, e isso precisa ser classificado - mas se o disco estiver armazenado em uma partição LVM, você poderá criar uma partição de captura instantânea e copiar o disco de lá como se fosse foi um backup

    
por 28.07.2016 / 19:50
5

Bem, já existe uma resposta aceita e, além disso, há uma boa resposta usando o fato de ser um servidor da Web.

Mas só para apontar uma linha de ataque que eu não acho que é muito abordada é se você tem acesso à linha de comando, provavelmente você está usando um programa terminal, e a maioria tem algum jeito de registrar coisas que rola para fora da tela.

Então, talvez essa resposta possa ajudar no futuro para alguém que não tenha um servidor da Web em execução. Basicamente, o que pode ser chamado de transferência de arquivo de expediente de campo usando ferramentas comuns do Linux

Pode-se enviar a pasta como ASCII. Tar a pasta, converter isso de binário para ASCII usando um número de possibilidades. Então, na máquina executando o programa terman, recupere o blob ASCII do scrollback e extraia o binário dele.

tar czf - folderpath | uuencode temp.tar.gz

ou

tar cvf - folderpath | base64

irá despejar um enorme bloco de texto no seu terminal. Se você puder capturar isso como uma rolagem, limpá-lo um pouco em um editor de texto e decodificá-lo de volta para binário, você terá um tar.gz da pasta. Claro, você pode ter que fazer algo como configurar seu pergaminho de volta em putty para uma quantidade enorme de linhas.

Acho que você poderia usar xxd para fazer a codificação e a decodificação, se quisesse.

Se você não conseguir ajustá-lo no pergaminho de uma só vez, poderá até mesmo dividi-lo usando head e tail e enviar o ASCII por vez.

Os detalhes dependem de quais utilitários você tem acesso e de quanto esforço você deseja fazer para espremer esses dados por meio de um fluxo de dados do console

(o OP deve usar o servidor da web)

    
por 29.07.2016 / 21:20
4

Embora essa seja a VM do ESXi, você precisa conectar outro vmdisk a ela. Em seguida, mova tudo que não seja crítico para esse disco e instale a ferramenta de sua escolha - ssh / scp / rsync / everything else.

    
por 28.07.2016 / 17:40
3

Se você conseguir executar comandos shell no servidor, poderá executar tar com os argumentos corretos para criar um arquivo .tar (ou .tar.gz ) contendo os arquivos e, em seguida, executar curl ou wget para enviar o arquivo para o link . De outro computador, você pode recuperar o arquivo.

Se você não conseguir executar comandos shell no servidor, deverá perguntar ao administrador de sistemas ou DBA do servidor como eles executam comandos. (Você mencionou que o servidor executa um banco de dados importante, portanto, deve haver uma maneira de executar tarefas de manutenção.)

Se você conseguir enviar .php arquivos e executá-los (ou seja, exibir páginas da Web), poderá encontrar um script admin .php que expõe uma árvore de diretórios, carrega-a e executa-a.

    
por 29.07.2016 / 10:05
3

De outro host, faça:

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

Pegue o arquivo some-file.img na sua área de trabalho. O cliente VMware deve ser capaz de montá-lo como uma unidade de disquete.

  • Ajuste count=1000 para atender sua necessidade.
por 28.07.2016 / 16:07
2

Crie um novo Vmdk no armazenamento de dados. Anexe-o à VM em tempo de execução, descubra-o na VM, particione-o, crie um sistema de arquivos nele, monte-o em um ponto de montagem e copie os dados para ele. Uma vez feito isso, desmonte-o, desconecte o Vmdk e, em seguida, conecte-se a uma VM na qual você tem o acesso ssh / sftp / nfs. Em seguida, descubra, monte e copie para onde for necessário.

    
por 29.07.2016 / 22:33