Executar uma diferença entre arquivos locais e remotos

39

Estou conectado a um host via sshe gostaria de comparar (digamos com diff) um determinado arquivo de configuração com o de outro servidor, também acessível via ssh, sem precisar baixar manualmente o arquivo remoto antes de executar o diff.

fduff
fonte
Você pode montar o diretório remoto usando SSHFSe acessá-lo como se fosse local.
Barmar

Respostas:

57
ssh user@remote_host "cat remote_file.txt" | diff - local_file.txt

Fonte

polym
fonte
1
O canal não fará o download apenas dos resultados cat, que na verdade são apenas o arquivo original?
Stijn de Witt
1
o canal enviará o resultado do sshcomando remoto para o diffque está aguardando para comparar stdincom o arquivo local.
Fduff
1
Talvez eu esteja interpretando mal o requisito 'sem ter que baixar o arquivo remoto'. Eu acho que OP significa 'sem ter que baixar manualmente o arquivo remoto'. :) EDIT: Ah, você é o OP. :)
Stijn de Witt
@StijndeWitt, sim eu queria evitar ter de scp o arquivo remoto primeiro e depois fazer o diff ..
fduff
18

Experimentar:

diff local_file <(ssh user@server 'cat remote_file')

ou usando vimdiff:

vimdiff local_file scp://server//path/to/remote_file
cuonglm
fonte
Funciona diff local_file <(ssh user@server 'cat remote_file')apenas para SSH sem senha? Parece que não consigo obter um prompt de senha com ele ...
sdbbs 30/06
1
@sdbbs: a substituição do processo foi executada em segundo plano e a saída padrão é gravada no pipe nomeado (ou pipe nomeado anônimo), para que você não receba o prompt de senha. Tente cat <(ssh user@server 'cat remote_file')e cat < <(ssh user@server 'cat remote_file')veja as diferenças.
cuonglm
9

Talvez isso não seja útil no seu caso exato, mas geralmente uso

sum -r

em cada máquina e compare manualmente as somas de verificação. Isso permite comparações de arquivos, mesmo quando eles não são acessíveis através de uma conexão ssh. Obviamente, tudo o que ela responde é "eles são idênticos", mas geralmente isso é suficiente para minhas necessidades. Também facilita verificar se um único arquivo é igual em 3 ou 4 ou mais máquinas.

MJB
fonte
2
Eu posso imaginar que, para arquivos grandes ou conexões lentas, isso possa ser muito útil. Ele salva o download de todo o arquivo para quando os arquivos são realmente diferentes. Um scripter Bash melhor do que eu provavelmente pode combinar essa resposta com as respostas acima, envolvendo um controle remoto, catpara executar o catcomando apenas quando for determinado que os arquivos diferem.
Stijn de Witt
1
Commanding info coreutils 'sum invocation'diz, inter alia: "'sum' é fornecido para compatibilidade; o programa 'cksum' (consulte a próxima seção) é preferível em novos aplicativos".
Teemu Leisti 22/11/19
1

Se você preferir uma abordagem mais visual na sua sessão terminal. O comandante da meia-noite possui uma opção de sistema de arquivos remoto (opção SFTP link ... no menu) e uma opção de comparação visual de arquivos. Ele não é instalado por padrão na maioria dos sistemas Linux, mas está disponível na maioria dos repositórios base. Passos:

  1. Inicie o midnight commander (command mc:) na pasta que contém o arquivo a ser comparado
  2. Por outro lado (por exemplo, o menu Direito ), crie um link sftp para o outro servidor na mesma pasta ( sftp://<user>@<servername>/<path>).
  3. Usando a instecla, selecione / realce os arquivos a serem comparados. ( tabmuda entre os painéis esquerdo e direito).
  4. No menu Comando , selecione Comparar arquivos

Nota: O menu do comandante da meia-noite geralmente pode ser acessado usando o mouse na sua sessão do terminal. Se não funcionar, F9você também fica no menu.

Fholst
fonte