Você está certo de que é a citação. Usando aspas duplas para envolver seu comando remoto, você está dizendo ao seu shell local para interpretar o que puder para passar para a sessão ssh. Nesse caso, o comando cat
.
Se você colocar seu comando entre aspas simples, não terá esse problema, mas também não poderá expandir as variáveis que foram definidas fora das aspas simples.
arquivo local:
bash-[501]$ echo $(hostname) > /tmp/samplefile
bash-[506]$ echo $(cat /tmp/samplefile)
tank
crie o arquivo remoto:
bash-[502]$ ssh evil 'echo $(hostname) > /tmp/samplefile'
bash-[501]$ cat /tmp/samplefile
evil
tente visualizar o arquivo remoto com aspas duplas:
bash-[508]$ ssh evil "echo 'cat /tmp/samplefile'"
tank
tente visualizar o arquivo remoto com aspas simples:
bash-[509]$ ssh evil 'echo 'cat /tmp/samplefile''
evil
defina o arquivo como uma variável a ser processada no lado remoto:
bash-[527]$ ssh evil 'F=/tmp/samplefile; cat $F'
evil
No seu caso, colocando o comando entre aspas simples e definindo $CHECK
dentro dessas citações, será suficiente para enviar tudo para ser interpretado no lado remoto.
ssh -n [email protected] 'CHECK=/home/test/Desktop; until [ 'cat $CHECK/samplefile | grep "string"' ]; do touch $CHECK/success; done'