Executando um comando na máquina remota e redirecionando a saída para um arquivo local

1

Estou fazendo o upload de um arquivo via sftp e apenas realizando o teste de segurança se o arquivo estiver completamente carregado no servidor remoto. Eu estou tomando md5 hash de ambos (arquivo em local e arquivo no servidor remoto) e combinando-os. Se eles corresponderem, concluo que o upload foi bem-sucedido. Aqui está a parte do código do shell script.

ssh $REMOTE_MC 'digest -a md5 $TARGET_DIR/$filename' > $HOME_DIR/remote_hash_$datetag.txt
local_hash=$(md5sum $HOME_DIR/$dump | cut -d' ' -f1)
echo "local = $local_hash"
cat $HOME_DIR/remote_hash_$datetag.txt
remote_hash=$(cat $HOME_DIR/remote_hash_$datetag.txt)
echo "remote = $remote_hash" 



output:
local = cd8d77f0467754bc0c1c7ac3fb7f6184
dee4a8484f99c577fd70cb8fa01e5995
remote = dee4a8484f99c577fd70cb8fa01e5995

O problema que estou enfrentando é que, quando eu executo o script, os hashes são diferentes, mas se eu executar o comando
ssh $REMOTE_MC 'digest -a md5 $TARGET_DIR/$filename' > $HOME_DIR/remote_hash_$datetag.txt
fora do script de shell, eu recebo o mesmo hash. O que estou fazendo errado no roteiro?

Coisas que tentei:
ssh $REMOTE_MC 'digest -a md5 $TARGET_DIR/$filename >> $TARGET_DIR/remote.txt'
Eu redirecionei a saída para um arquivo remoto em vez de um arquivo local, o arquivo remoto contém o hash correto. Mas se eu redirecionar para arquivo local, o hash mismatches.

Obrigado antecipadamente.

    
por Deepak K M 07.12.2015 / 07:14

1 resposta

1

Você está usando aspas simples em torno do comando ssh . Dessa forma, as variáveis $TARGET_DIR e $filename são consideradas literalmente em vez de serem avaliadas. Altere as aspas simples para aspas duplas para que as variáveis sejam avaliadas:

ssh $REMOTE_MC "digest -a md5 $TARGET_DIR/$filename" > $HOME_DIR/remote_hash_$datetag.txt

Outra sugestão é escrever as variáveis como ${variable} como ${datetag} para tornar os limites de nome da variável mais claros.

    
por 07.12.2015 / 08:41