Como copiar arquivos entre dois shells SSH abertos?

1

Se eu estiver logado via SSH em 2 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?

Bart van Heukelom
fonte

Respostas:

3

No servidor1:

scp <files> server2:/dest/dir/

Ou, se você tiver o rsync instalado:

rsync -azvu basedir/ server2:destdir/

Caso contrário, passe pelo alcatrão:

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

Os dois últimos copiam árvores de diretório inteiras. O primeiro ou mais arquivos em um diretório.

Em outras palavras, basta usar ferramentas de shell do primeiro para copiar diretamente para o segundo.

Keith
fonte
Porém, isso exigiria um login (que fica mais difícil se envolver chaves) e não permite algo como sudo(bem, talvez o SSH de pipe-tar-through faça?). Mas é a maneira mais prática de transferir dados maiores.
Bart van Heukelom
1
Isso permite. Basta colocar um "sudo" lá dentro. Você pode configurar a autenticação de chave pública para torná-la sem senha.
8302 Keith
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, inserir, Ctrl-D

Como é que isso funciona?

  1. Cria um tar compactado dos arquivos e a 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 alcatrão.
  3. Cole os dados para alimentá-los nessa cadeia e, em seguida, digite e Ctrl-D para enviar o final do arquivo.
Bart van Heukelom
fonte
2

Com duas sessões ssh abertas, a maneira mais rápida de copiar seria:

  1. Use 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 geralmente, 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 consigo me lembrar com mais frequência).

robertmoggach
fonte
Interessante. Atualmente, estou trabalhando em servidores EC2 nos quais precisaria abrir uma porta extra para isso, mas também poderia usar essa porta para outras ferramentas.
Bart van Heukelom
Apenas testei e funciona bem. Pequeno erro: a -popção (opção de origem) não deve estar lá no comando de destino.
Bart van Heukelom
oops ... você está certo. -p source_port Specifies the source port nc should use, subject to privilege restrictions and availability. It is an error to use this option in conjunction with the -l option.
Robertmoggach