а как насчет
/dev/mapper/MYVGNAME--vg-images /images ext4 defaults 0 1
в fstab
?
(я полагаю, вы отформатировали его ext4
)
Когда вы пишете $ PGWA
без кавычек, это разделяет значение PGWA
на пробелы¹. Цитаты не имеют здесь особого значения, поэтому в итоге вы получите слова -o
, ProxyCommand = "ssh
, gateway1
, nc
, % h
и % p "
.
См. Почему мой сценарий оболочки подавляется пробелами или другими специальными символами? для получения дополнительных объяснений.
Расширение переменной вне двойных кавычек почти всегда является ошибкой. Это всегда ошибка, если вы не знаете, почему нужно убирать двойные кавычки.
Что вам нужно сделать, так это передать два аргумента команде SSH: -o
и ProxyCommand = ssh gateway2 nc --proxy% h% p --proxy-type socks4
.
В zsh вы можете просто установить PGWA
как массив:
PGWA=(-o 'ProxyCommand=ssh gateway2 nc --proxy %h %p --proxy-type socks4')
ssh $PGWA …
В других оболочках, таких как bash и ksh, это требует большего количества наборов символов из-за их конструктивной ошибки, заключающейся в том, что расширения переменных без кавычек подвергаются разбиению и из-за их явного синтаксиса для массивов:
PGWA=(-o 'ProxyCommand=ssh gateway2 nc --proxy %h %p --proxy-type socks4')
ssh "${PGWA[@]}" …
Метод, который работал бы в любой sh-подобной оболочке и не требовал бы большого количества наборов текста, - это определение функций.
pgwa () {
typeset c="$1"; shift
"$c" -o 'ProxyCommand=ssh gateway2 nc --proxy %h %p --proxy-type socks4' "$@"
}
pgwa ssh …
Но я думаю, что лучшим решением было бы поместить все эти определения в ваш .ssh / config
, где они и должны быть. Таким образом, вам не понадобятся какие-либо уловки с оболочкой, и конфигурации будут работать в других программах (rsync, sshfs, программах передачи файлов с графическим интерфейсом и т. Д.). Если вы добавляете новую виртуальную машину за gateway1, либо добавьте запись в .ssh / config
или используйте ssh -o HostName = new-vm something-behind-gateway1…
¹ Плюс другие вещи, которые здесь не имеют значения.