Я думаю, что необходимо использовать:
testvar="sudo /home/pi/shared/blink.sh 27 off"
ssh -n -q -q -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 $1 "${testvar}"
Это работает на меня:
$ bash -x -c 'testvar="la la la"; echo "${testvar}"'
+ testvar='la la la'
+ echo 'la la la'
la la la
Но если я пишу, что то же как Вы сделало, я получаю тот же неправильный результат:
$ bash -x -c 'testvar="\"la la la\""; echo ${testvar}'
+ testvar='"la la la"'
+ echo '"la' la 'la"'
"la la la"
Одним из вариантов, которые могут работать, является создание Chroot с минимальной установкой вашей системы. В Debian и Ubuntu это может быть достигнуто с Debootstrap. В FreeBSD это достигается более тщательно через тюрьмы (я не буду ссылаться на тюремные тюрьмы, отличные от здесь).
После того, как у вас есть этот шаг, запустите SSHD на другом порту в среде Chroot. Что-то вроде этого:
chroot /srv/chroot-for-user /usr/bin/sshd -p 2200
Добавьте пользователя в Chroot / etc / passwd и создайте домашний каталог для них.
Они будут войти в новую среду и увидеть только файлы до границы Chroot. Они все равно будут прочитать доступ ко всем системам системных файлов в Chroot, как раньше, потому что без них они не смогут использовать обычные системные инструменты, такие как Ls, awk и Tee, но они будут их собственной копией за пределами Chroot.
Есть еще более умные способы достижения такого рода вещей, но Chroot - это проверенный и верный способ ограничить доступ к файловой системе.
Если ваш пользователь переходит на SSH к системе, это немного сложно. Если он будет использовать SFTP-клиент, вы можете настроить chroot jail. Это позволит вам установить ChrootDirectory в папку, на которую вы ссылаетесь.