Вы можете использовать два правила, как описано здесь (, возможно, в сочетании с другим изящным трюком, описанным в этом сообщении в блоге , чтобы сделать его более общим/легко расходуемым):
ACTION=="add", SUBSYSTEM=="usb", ENV{USB_IDS}="%s{idVendor}:%s{idProduct}"
ACTION=="add", ENV{USB_IDS}=="12d1:1506", ATTRS{bInterfaceNumber}=="00", RUN+="/usr/bin/systemctl start modem_dialer"
Однако первое правило должно однозначно соответствовать узлу, содержащему права idVendor
и idProduct
, в противном случае нет гарантии, что оно установит USB_IDS
в правильные значения, а второе правило сможет соответствовать. Однако я не знаю ни одного атрибута, который мог бы в целом соответствовать листовым узлам USB. :/
В printenv
переменная должна быть экспортирована, что означает, что вы предоставляете ее другим командам в сценарии, любая из которых потенциально может привести к ее утечке. Но если между экспортом переменной и ее использованием в качестве входных данных нет другой команды, и вы отключили ее сразу после использования, маловероятно, что она будет случайно сброшена в журнал.
Если вы используете bash, вы можете использовать вместо нее строку:
kinit x@example.com <<<"$passwd"
Строки Herstring не включаются в set -x
вывод, и переменную не нужно экспортировать:
$ bar=abc
+ bar=abc
$ cat <<<"$bar"
+ cat
abc
Но здесь строки создают временные файлы, так что это можно рассматривать как потенциальный источник утечки.
Я приведу вам пример с sshpass
использованием временного fd для использования пароля в качестве аргумента вместо стандартного ввода с использованием set -x
он не будет распечатывать пароль:
#Set the password as an environment variable
export password=MyPassword
#Create the file descriptor 3 and link it to /tmp/pwd, you can use one from 3 to 9.
exec 3<> /tmp/pwd
#Copy the content of password env variable to /tmp/pwd using dd command
dd of=/tmp/pwd <<< "$password"
#Here using cat and passing it to xargs so stdout will be catched by stdin of xargs, then the password will be available within the second curly brackets
cat /tmp/pwd | xargs -I {} sshpass -p {} ssh <user>@<ip>
#Close the file descriptor
exec 3>&-
#Remove the tmp file
rm -f /tmp/pwd
Вы можете адаптировать этот ответ к своим вариантам использования.