Systemd: невозможно замаскировать службу с помощью параметров ядра

Параметр AddKeysToAgent делает то, что я хочу. Я могу указать -o AddKeysToAgent = yes в командной строке или добавить AddKeysToAgent yes в отдельную строку в моем .ssh / config . Либо работает.

Похоже, это совсем недавнее дополнение к openssh, появившееся в выпуске 7.2 от 28.02.2016!

http://www.openssh.com/txt/release-7.2

Спасибо, OpenBSD! Я буду использовать этот лот .

3
03.03.2019, 13:18
2 ответа
printf '%s\n' "${(P)$(echo "_v2_$_v1")}"

альтернативно

var=_v2_$_v1
printf '%s\n' "${(P)var}"

В обоих случаях флаг расширения параметра (P)используется для расширения имени внутри ${...}до имени фактической переменной, значение которой мы хотим получить.

Это аналогично переменной косвенности с ${!...}в оболочке bash.

2
27.01.2020, 21:13

Сzsh:

  • ${(P)varname}расширяется до значения переменной, имя которой хранится в $varname. Итак, если $varnameсодержит var, ${(P)varname}расширяется до того же, что и $var.
  • ${(e)var}расширяется до содержимого $var, но также выполняет расширение параметров, подстановку команд и арифметическое расширение внутри. Итак, если $varсодержит $othervar, ${(e)var}расширяется до того же, что и $othervar.
  • Вы можете вкладывать операторы раскрытия переменных, чтобы такие вещи, как ${(P)${var:-something}}работали
  • ${:-content}— это один из способов расширить расширение параметра до произвольного текста (здесьcontent)

(подробнее см. в руководстве )

Так что можно было:

_v1=windows
_v2_windows=/mnt/d
printf '%s\n' ${(P)${:-_v2_$_v1}}

Или:

printf '%s\n' ${(e)${:-\$_v2_$_v1}}

Или сделать это в два этапа:

varname=_v2_$_v1
printf '%s\n' ${(P)varname}

Или:

expansions_to_evaluate=\$_v2_$_v1

printf '%s\n' ${(e)expansions_to_evaluate}

Или вы можете использовать стандартный синтаксис POSIX:

eval 'printf "%s\n" "${_v2_'"$_v1"'}"'

Имейте в виду, что если значение $_v1не находится под вашим контролем, все это представляет собой уязвимость, связанную с внедрением произвольных команд, вам необходимо сначала очистить значение.

Также обратите внимание, что zshподдерживает ассоциативные массивы (и задолго до bash), так что вы можете сделать:

typeset -A mnt
mnt=(
  windows /mnt/d
  osx     /Volumes/d
)
os=windows
printf '%s\n' $mnt[$os]

Это было бы намного более разборчиво и не имело бы никаких последствий для безопасности.

8
27.01.2020, 21:13

Теги

Похожие вопросы