원격 컴퓨터에서 명령을 실행하고 출력을 로컬 파일로 리디렉션

원격 컴퓨터에서 명령을 실행하고 출력을 로컬 파일로 리디렉션

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_DIRsum은 $filename평가되지 않고 문자 그대로 사용됩니다. 변수를 평가하려면 작은따옴표를 큰따옴표로 변경하세요.

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

${variable}${datetag}또 다른 제안은 변수 이름 경계가 더 명확해지는 방식으로 변수를 작성하는 것입니다 .

관련 정보