![SSH를 통해 전송된 조건은 원격이 아닌 로컬로 실행됩니다.](https://linux55.com/image/87146/SSH%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EC%A0%84%EC%86%A1%EB%90%9C%20%EC%A1%B0%EA%B1%B4%EC%9D%80%20%EC%9B%90%EA%B2%A9%EC%9D%B4%20%EC%95%84%EB%8B%8C%20%EB%A1%9C%EC%BB%AC%EB%A1%9C%20%EC%8B%A4%ED%96%89%EB%90%A9%EB%8B%88%EB%8B%A4..png)
그래서 나는 다음과 같이하려고합니다 :
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \
/home/backupboy/.ssh/id_rsa [email protected] \
"[[ $(ls -1 /mnt/dir | wc -l) -gt 4 ]] && rm /mnt/dir/*"
이렇게 하면 조건이 로컬에서 실행됩니다. 이는 원격이 아닌 로컬에서 ssh
파일 수를 확인하는 것을 의미합니다. /mnt/dir
이 문제를 해결할 방법이 있나요? 원격으로 조건을 처리해야 합니다.
답변1
주위에 작은따옴표를 사용하면 쉘이 확장되는 것을 방지하고 문자열은 반대쪽에서 그대로 처리됩니다.
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /home/backupboy/.ssh/id_rsa [email protected] '[[ $(ls -1 /mnt/dir | wc -l) -gt 4 ]] && rm /mnt/dir/*'
일부 지역 변수를 사용하고 일부 부분을 원격으로 실행하려면 전달하려는 부분을 이스케이프해야 합니다. 예를 들어 디렉터리 이름을 변수에 포함하려면 다음을 수행할 수 있습니다.
path=/mnt/dir
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /home/backupboy/.ssh/id_rsa [email protected] "[[ \$(ls -1 \"$path\" | wc -l) -gt 4 ]] && rm -- \"$path\"/*"