Мой код на bash:
1 #!/bash/sh
2 set -e
3 USER="admin"
4 HOST="1.2.3.4"
5 PASSWORD="$(cat password.txt)"
6
7 sshpass -p"$PASSWORD" ssh -t $USER@$HOST "/usr/bin/sudo bash -c 'sudo ls 2>&1; echo \"testing\";sudo ls src 2>&1;exit;'" >> log.txt
8
9 echo "------------------------------Another Method ----------------------------------------"
10 sshpass -p"$PASSWORD" ssh -t $USER@$HOST << EOF
11 echo "....1...."
12 sudo ls 2>&1
13 echo "....2...."
14 ls src 2>&1
15 sudo echo "....3...."
16 exit
17 EOF
Строка 7 может запускать несколько команд с sudo и выводить информацию в log.txt, Строка 9-> Строка 17 - нет. Но я предпочитаю использовать Line9–17, потому что команды, которые я хотел бы запустить, могут содержать вложенные операторы управления (например, if-else-fi). Я понятия не имею, как это сделать в строке 7. Как заставить строки с 9 по 17 запускать несколько команд с помощью sudo и печатать в локальный файл log.txt?
Часть вывода на экран:
....1....
sudo: no tty present and no askpass program specified
sudo: pam_authenticate: User not known to the underlying authentication module
....2....
tmp
....3....
Любая помощь приветствуется. Спасибо.
Вы, кажется, не знаете, что можете добавить >> log.txt
после первого EOF
.
sshpass -p"$PASSWORD" ssh -t $USER@$HOST <<'EOF' >>log.txt
echo "....1...."
sudo ls 2>&1
: etc
EOF
Вы можете вводить одни и те же команды в обоих вариантах (разделенные новой строкой или точкой с запятой), хотя правильное цитирование в первом случае немного сложнее (не во втором! Хотя я добавил кавычки вокруг 'EOF'
чтобы оболочка не интерполировала переменные и т. д. в этом документе; если вам нужна оболочка для этого, вам нужно отменить это изменение).