Como copiar arquivos entre duas shells SSH abertas?

1

Se eu estiver conectado via SSH em dois servidores e quiser copiar alguns arquivos de um para o outro (por exemplo, configuração de um servidor antigo para um novo), qual é a maneira mais fácil de fazer isso?

    
por Bart van Heukelom 08.06.2012 / 11:31

3 respostas

3

no servidor1:

scp <files> server2:/dest/dir/

Ou, se você tiver instalado o rsync:

rsync -azvu basedir/ server2:destdir/

Se não, canalizar pelo tar então:

tar cf -  -C srcdir | ssh server2 tar xf - -C dstdir

As duas últimas copiam árvores inteiras de diretório. O primeiro um ou mais arquivos em um diretório.

Em outras palavras, apenas use ferramentas shell do primeiro para copiar diretamente para o segundo.

    
por 08.06.2012 / 12:23
2

Se o tamanho total não for muito grande, pode-se usar esse pequeno truque.

  1. Um servidor de origem, faça tar -cz <filestocopy> | base64
  2. Copie a saída para a área de transferência
  3. No servidor de destino, faça base64 -d | tar -xzv
  4. Colar, digite, Ctrl-D

Como isso funciona?

  1. Cria um tar compactado dos arquivos e o base64 o codifica para que possa ser copiado e colado como texto simples.
  2. Configura uma cadeia de comando que faz o inverso; decodifica a entrada base64 e extrai o tar.
  3. Cole os dados para alimentá-los nessa cadeia e, em seguida, insira e Ctrl-D para enviar o fim do arquivo.
por 08.06.2012 / 11:31
2

Com duas sessões ssh abertas, o modo mais rápido de copiar seria:

  1. Use o netcat (nc)

    Sender/Source machine:
    tar -czf - /source/dir | nc -l 2342
    
    Receiver/Destination machine:
    nc -w 10 sourcemachine 2342 | tar -C /target/dir -xz -
    
  2. Use scp com criptografia menos segura. O padrão é blowfish normalmente, mas o arcfour é uma alternativa muito mais rápida.

    scp -c arcfour mogga@flinflon:/home/users/mogga /dev/null
    

Eu costumo usar a segunda opção (simplesmente porque eu consigo me lembrar dela com mais frequência).

    
por 08.06.2012 / 13:58