Transferindo arquivos do host remoto para o local com sshpass

1

Eu quero transferir arquivos com mais de 40 dias de remoto para host local. Eu sou capaz de conectar o servidor remoto, mas incapaz de transferir os arquivos do remoto para o servidor local. Isso resulta em erro que diz que não há arquivos Nenhum arquivo ou diretório, mas o arquivo existe nos hosts remotos.

Detalhes:

file='sshpass -p "password" ssh username@server_ip "find /arch -type f -ctime -40"'
sshpass -p "password" scp -r  username@server_ip:$file /arch
echo SCP Completed.

Detalhes do erro:

cp: cannot stat ‘/arch/file1.xls’: No such file or directory
    
por James 26.09.2018 / 10:03

1 resposta

1

Você precisa cuidar de uma coisa ou duas:

  • Permissões: talvez você não tenha as permissões certas para ler um arquivo;
  • Resposta multilinha: sua localização pode fornecer mais de um arquivo como resultado.

Para encurtar a história, provavelmente o seu problema não é sshpass .

A partir de agora, damos por certo que você não tem problemas relacionados a permissões.

O que você pode fazer é algo assim:

files="$(sshpass -p "passwd" ssh -l username rhost "find /arch -type f -ctime -40")"
for file in ${files}; do
  if sshpass -p "passwd" scp "username@rhost:${file}" /arch; then
    printf "SCP Completed\n"
  fi
done

Teoricamente, $files não contém o que você não pode pegar, porque find imprimirá em stderr os arquivos (pastas) que você não pode alcançar, então você deve gerenciar isso de uma maneira separada.

Entre todas as opções, você pode mesclar stderr com stdout e adicionar uma condição ao seu ciclo for ou salvar os erros em outro var (ou arquivo) e alterná-los separadamente.

    
por 26.09.2018 / 10:29