Existe uma maneira fácil de transferir arquivos entre dois servidores SSH/SFTP? A solução perfeita seria FileZilla, mas só permite criar uma conexão entre local e remoto, mas não entre remoto e remoto.
Teoricamente, eu poderia abrir duas janelas do Nautilus e conectar-me a algumas ssh://server1/path/to/folder
e ssh://server2/path/to/folder
, em seguida, apenas puxar os arquivos de um para o outro lado. Minha experiência é que isso é muito instável. Transmitir arquivos em tamanho de 10 MB não é problema, mas transferir 10 GB geralmente resultava no Nautilus travando e permanecendo lá precisando de ps -e | grep nautilus
-> kill -9 <pid>
. Também testei a mesma coisa com Nemo e Caja. Enquanto o Nemo tende a ser mais estável do que os outros dois, ainda não é perfeito e também quebra de vez em quando. O FileZilla é extremamente estável, nunca chegou a quebrar, mas não é muito flexível devido ao fato mencionado de que só pode se conectar a um único servidor SSH.
Claro que também poderia montar uma pasta com sshfs
, mas essa é uma solução meio inconveniente. Muito trabalho prévio a ser feito para executar uma transferência simples.
Existe algum aplicativo que possa lidar com transferências entre dois servidores SSH sem quebrar? Perfeito seria algo como o FileZilla, que retoma o trabalho se a conexão for interrompida.
Se você estiver em uma versão do Ubuntu que ainda é suportada, seu
scp
comando fornecerá a-3
opção que permite copiar arquivos de remote1 para remote2 via localhost :Você também pode omitir a
-3
opção, mas precisará da chave pública (id_rsa.pub
) deuser1@remote1
no arquivoauthorized_keys
deuser2@remote2
:scp
então sob o capô faz umssh user1@remote1
primeiro e de láscp /path/to/file1 user2@remote2:/path/to/file2
. É por isso que a credencial deve ser distribuída diferente da-3
solução.Em outras palavras:
scp -3 remote1:file1 remote2:file2
transfere o arquivo de remote1 para localhost e depois de volta para remote2 . Os dados viajam remote1 → localhost → remote2 . O localhost é a terceira parte neste cenário, portanto,-3
. Para que isso funcione, você precisará das credenciais do localhost em remote1 e remote2 porque o localhost se conecta a ambos.scp remote1:file1 remote2:file2
copia o arquivo diretamente de remote1 para remote2 na velocidade com que eles estão conectados um ao outro. localhost não está envolvido aqui (além de emitir o comando). Os dados viajam remote1 → remote2 . Para que isso funcione, você precisará das credenciais de localhost apenas em remote1 , mas , além disso, precisará das credenciais de remote1 em remote2 porque localhost se conecta apenas a remote1 e então remote1 se conecta a remote2 .Se possível, eu escolheria a segunda abordagem. Como alguns comentários já dizem:
geralmentemuitas vezes o cabo de rede entre remote1 e remote2 é bem mais grosso que o cabo entre eles e localhost .Na maioria dos casos, dois servidores ssh podem alcançar um ao outro (ou pelo menos um pode alcançar o outro) e, novamente, na maioria dos casos, a Internet da estação de trabalho é muito pior do que qualquer um dos servidores.
Nesse caso, ordenar que um servidor seja transferido para o outro é o caminho a percorrer.
Verifique
nohup.out
no server1 se há erros.Se a acessibilidade do servidor for o contrário, você pode reverter qual máquina é a mestre:
Talvez você possa usar um dos vários front-ends da GUI para rsync:
Existe algum aplicativo GUI para o comando rsync?
Ou talvez você possa usar o rsync diretamente da linha de comando para se conectar a ambos os servidores remotos:
"Como sincronizar arquivos entre dois controles remotos"
Costumo fazer login em um servidor com ssh e, a partir da linha de comando desse servidor, usar o rsync para enviar ou extrair arquivos para o outro servidor remoto - isso geralmente é muito mais rápido do que tentar transferir os arquivos por meio de um terceiro computador.
O rsync é inteligente o suficiente para fazer algum trabalho, então, se algo der errado e interromper o processo, ele pode continuar de onde parou.
Você precisa usar o protocolo SCP.
scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save