Como fazer upload de um arquivo e, em seguida, verificá-lo e executar alguns outros comandos usando apenas ssh, cat e diff em uma única sessão SSH?

3

O objetivo é alterar alguns parâmetros em vários dispositivos em conexões que são pouco confiáveis (sem fio) - de acordo com o csv que possui o formato: IP, Parâmetro, Parâmetro

Eu gostaria de fazer um script bash que carregue um arquivo, depois verifique o conteúdo dele na cópia local, depois execute outros comandos usando apenas bash, ssh, cat e diff no final remoto. Apenas ferramentas básicas estão disponíveis nos servidores linux remotos (Busybox), e existem milhares delas, então escalar é importante. Eu preferiria muito fazer tudo isso em uma única sessão SSH, onde a autenticação só tem que acontecer de uma maneira e uma vez. Finja, no momento, que a segurança não é um problema. Eu estou olhando em como escalar rsa distribuição de chave pública para todos estes, mas por agora, eu quero que isso funcione com autenticação de senha. Por favor, não faça isso em uma brincadeira sobre práticas de segurança. Talvez haja uma maneira muito mais fácil de atingir o objetivo mencionado acima. Se sim, por favor compartilhe. Obrigado.

Então os passos são:

  1. Faça login na caixa remota.
  2. Copie o arquivo local para a caixa remota em um diretório específico.
  3. Execute o diff ou algum tipo de verificação para erros de cópia de arquivos.
  4. Se o erro parar o script, continue.
  5. Executar outros comandos na caixa remota.
  6. Envie os resultados dos comandos para um arquivo local.
  7. Feche a sessão.
  8. Enxágüe e repita.

Abaixo está uma espécie de pseudocódigo. Mas dá uma ideia do que estou tentando fazer. diff não vê a saída da catalogação do arquivo local, então ele acha que eles não são os mesmos.

IFS=\,
while read IP PARAM1 PARAM2; do

cat /home/user/uploadscript.sh | sshpass -p $password ssh -v -o StrictHostKeyChecking=no -l uname 192.168.x.x 'cat > /tmp/script.sh && cat | diff -sb - /tmp/script.sh && IP="IP" && P1="$PARAM1" && P2="$PARAM2" && ./script.sh'

done < list_of_ipaddresses.txt >> log.txt
    
por Matt D 26.02.2016 / 01:24

1 resposta

0

O único comando que você precisa é scp . Como qualquer outro comando, scp retorna o código de status 0 para indicar sucesso ou diferente de zero para indicar um erro. Se scp retornar 0, o arquivo foi carregado com sucesso.

if scp …; then
  echo >&2 "The file was uploaded successfully."
else
  echo >&2 "There was an error uploading the file."
fi
    
por 28.02.2016 / 22:53

Tags