Привилегированная команда SSH пользователя без полномочий root с передачей файлов

Да, вы можете просто добавить -not -name , если в вашем скрипте есть второй аргумент:

#!/bin/bash 

targetDir="$1"
exclude="$2"

findString=" '$targetDir'"

if [[ ! -z "$exclude" ]]; then
        findString="$findString -not -name '$exclude'"
fi
eval "find $findString"

Например:

$ ls
file1  file1.sh  file2  file2.sh  file3.sh  file4.sh  file5.sh
$ foo.sh .
.
./file1
./file2
./file1.sh
./file4.sh
./file3.sh
./file5.sh
./file2.sh
$ foo.sh . '*sh'
.
./file1
./file2

Если вы хотите иметь возможность определять несколько шаблонов для exclude:

#!/bin/bash 

targetDir="$1"
findString=" '$targetDir'"
shift
exclude="'$1'"
shift
for i in "$@"; do
        exclude="$exclude -a -not -name '$i'";
done
if [[ ! -z "$exclude" ]]; then
        findString="$findString -not -name $exclude"
fi
eval "find $findString"
1
10.05.2019, 01:09
2 ответа

Если ваш specialCommandна самом деле не требует tty, и вы заставили sshсделать его только для sudoзапроса пароля, другой альтернативой является:

(echo "mypass" ; cat commandInput) | ssh user@ip "sudo -Sp '' specialCommand"

Опция -Sиз sudoзаставляет считывать пароль со стандартного ввода, который в данном случае исходит от вашего echo "mypass", в то время как опция -p ''гарантирует, что запрос пароля также не будет отображаться.

Тогда вы можете поместить свой пароль в отдельный файл, защищенный соответствующими разрешениями. Обычно это лучшая практика, чем жестко запрограммировать пароль в скрипте. Тогда команда станет:

cat passwordFile commandInput | ssh user@ip "sudo -Sp '' specialCommand"

В этом последнем случае убедитесь, что файл паролей состоит ровно из одной строки только с паролем и ничего больше, иначе то, что следует после строки пароля, загрязнит ввод для вашего specialCommand.

1
27.01.2020, 23:22

Как насчет:

(echo "mypass"; cat commandInput) | ssh -tt user@ip "sudo specialCommand"

Или, поскольку у вас, по-видимому, есть sudoдоступ к удаленному хосту, как насчет использования visudoдля добавления этой строки в самый конец/etc/sudoers(после существующей строки, предоставляющей пароль sudo. ] доступ кuser)?

user  ALL=(root) NOPASSWD: /full/path/of/specialCommand

Эта строка предоставляет пользователюuser(и никому другому )разрешение на запускspecialCommand(и ничего больше )от имени пользователя root без запроса пароля. При попытке выполнить любые другие команды через sudoпо-прежнему будет требоваться пароль, как обычно.

После этого вы сможете просто:

ssh -tt user@ip "sudo specialCommand" < commandInput
2
27.01.2020, 23:22

Теги

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