sftpを介してファイルをアップロードしていて、ファイルがリモートサーバーにアップロードされている場合にのみセキュリティテストを実行します。私は(ローカルファイルとリモートサーバー上のファイル)両方のmd5ハッシュを取得して一致させます。一致するとアップロードが成功しました。これはシェルスクリプトのコードの一部です。
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
私が直面している問題は、スクリプトを実行するとハッシュが異なりますが、
ssh $REMOTE_MC 'digest -a md5 $TARGET_DIR/$filename' > $HOME_DIR/remote_hash_$datetag.txt
シェルスクリプトでコマンドを実行すると同じハッシュを取得することです。スクリプトで私が何を間違っているのでしょうか?
試したこと:
ssh $REMOTE_MC 'digest -a md5 $TARGET_DIR/$filename >> $TARGET_DIR/remote.txt'
出力をローカルファイルではなくリモートファイルにリダイレクトし、リモートファイルに正しいハッシュが含まれています。しかし、ローカルファイルにリダイレクトすると、ハッシュが一致しません。
よろしくお願いします。
答え1
ssh
コマンドの周りに一重引用符を使用してください。このように、変数$TARGET_DIR
sumは$filename
評価されず、文字通り使用されます。変数を評価するには、一重引用符を二重引用符に変更します。
ssh $REMOTE_MC "digest -a md5 $TARGET_DIR/$filename" > $HOME_DIR/remote_hash_$datetag.txt
${variable}
${datetag}
別の提案は、変数名の境界がより明確になるように変数を作成することです。