Назад | Перейти на главную страницу

как запустить несколько команд (вложенные операторы управления) на удаленных машинах с помощью sudo?

Мой код на 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' чтобы оболочка не интерполировала переменные и т. д. в этом документе; если вам нужна оболочка для этого, вам нужно отменить это изменение).