在远程计算机中执行命令并将输出重定向到本地文件

在远程计算机中执行命令并将输出重定向到本地文件

我正在通过 sftp 上传文件,如果文件完全上传到远程服务器,则仅执行安全测试。我正在获取两者(本地文件和远程服务器中的文件)的 md5 哈希值并匹配它们。如果它们匹配,我就断定上传成功。这是 shell 脚本中的部分代码。

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
从 shell 脚本中运行命令,我会得到相同的哈希值。我在脚本中做错了什么?

我尝试过的事情:
ssh $REMOTE_MC 'digest -a md5 $TARGET_DIR/$filename >> $TARGET_DIR/remote.txt'
我将输出重定向到远程文件而不是本地文件,远程文件包含正确的哈希值。但是如果我将其重定向到本地文件,则哈希不匹配。

提前致谢。

答案1

您在ssh命令周围使用单引号。这样,变量$TARGET_DIR$filename就按字面意思获取,而不是进行求值。将单引号更改为双引号以评估变量:

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

${variable}另一个建议是这样编写变量,${datetag}以使变量名称边界更加清晰。

相关内容