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}
또 다른 제안은 변수 이름 경계가 더 명확해지는 방식으로 변수를 작성하는 것입니다 .