如何使用 sudo 在远程机器上运行多个命令(嵌套控制语句)?

如何使用 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 行则不能。但我更喜欢使用第 9 行到第 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....

欢迎任何帮助。谢谢。

答案1

您似乎没有意识到可以>> log.txt在第一个之后添加EOF

sshpass -p"$PASSWORD" ssh -t $USER@$HOST <<'EOF' >>log.txt
 echo "....1...."
 sudo ls 2>&1
 : etc     
EOF

您可以在两种变体中输入相同的命令(换行符或分号分隔),但在第一种情况下正确引用稍微困难一些(在第二种情况下则不然!虽然我在周围添加了引号'EOF'以防止 shell 在此处的文档中插入变量等;如果您需要 shell 这样做,则需要撤消该更改)。

相关内容