Убрать из конфига параметр
push "redirect-gateway def1"
Этот параметр перенаправляет весь трафик через VPN-туннель
Как вы заметили в своем вопросе, эта подстановка:
`cat $CHECK/samplefile | grep "string"`
была выполнена на вашей локальной машине. Вы можете легко исправить это следующим образом:
ssh -n test@192.168.1.2 \
"until { cat ""$CHECK""/samplefile | grep ""string""; }; do \
touch ""$CHECK""/success; \
done"
Как вы видите, вам не нужна никакая подстановка, кроме разрешения переменной $CHECK
. Вы можете поместить условные инструкции в список {...}
, и теперь код выхода списка будет решающим для инструкции until
.
export CHECK='/home/test/Desktop'
ssh -n test@192.168.1.2 'until [ `cat "$CHECK/samplefile" | grep "string"` ]; do touch "$CHECK/success"; done'
Вы правы, что это цитата. Заключая удаленную команду в двойные кавычки, вы указываете локальной оболочке интерпретировать все, что она может передать сеансу ssh. В данном случае команда cat
.
Если вы заключите команду в одинарные кавычки, у вас не будет этой проблемы, но вы также не сможете раскрыть переменные, которые были определены вне одинарных кавычек.
локальный файл:
bash-[501]$ echo $(hostname) > /tmp/samplefile
bash-[506]$ echo $(cat /tmp/samplefile)
tank
создать удаленный файл:
bash-[502]$ ssh evil 'echo $(hostname) > /tmp/samplefile'
bash-[501]$ cat /tmp/samplefile
evil
попытаться просмотреть удаленный файл в двойных кавычках:
bash-[508]$ ssh evil "echo `cat /tmp/samplefile`"
tank
попытаться просмотреть удаленный файл в одинарных кавычках:
bash-[509]$ ssh evil 'echo `cat /tmp/samplefile`'
evil
определить файл как переменную для обработки на удаленной стороне:
bash-[527]$ ssh evil 'F=/tmp/samplefile; cat $F'
evil
В вашем случае, заключая команду в одинарные кавычки и определяя $ CHECK
внутри этих кавычек, чтобы было достаточно, чтобы отправить все для интерпретации на удаленной стороне .
ssh -n test@192.168.1.2 'CHECK=/home/test/Desktop; until [ `cat $CHECK/samplefile | grep "string"` ]; do touch $CHECK/success; done'