通过 ssh 执行包含“sudo su”的远程脚本

时间:2021-03-16 12:26:25

标签: linux bash ssh scripting root

我需要运行一个需要以 root 权限远程运行的脚本。因此我在脚本的开头添加了“sudo su”命令。然而 ssh 只是登录远程服务器并停留在 sudo su 命令,并且它不会从脚本的下一行继续。

<块引用>

server.sh

sudo -s
sudo apt-get update
sudo apt-get upgrade
<块引用>

client.sh

 scp -i "$key.pem" server.sh "$dns:/tmp"
 ssh -tt -i "$key.pem" $dns  "bash /tmp/server.sh"

server.sh 和 client.sh 位于同一个本地目录。当我运行 ./client.sh 时,远程运行的 server.sh 卡在第一行并且不继续执行“sudo apt-get update”命令。出现这种行为的原因是什么,有解决办法吗?

3 个答案:

答案 0 :(得分:0)

sudo -s 没有命令会启动一个新的交互式 shell。以下命令在退出之前不会执行。请参阅man sudo

如果您已经通过 apt-get 运行 sudo,并且 sudo 不需要密码,为什么还需要 sudo -s

答案 1 :(得分:0)

你可以使用

ssh user@ip '[command]'

在远程主机上运行 [command]。如果您有一个具有 root 权限的用户(又名 sudo)并且您可以使用没有密码的命令(NOPASSWD:[command,list or ALL]),这是我可以建议的最安全的方法,但是如果您希望脚本在远程服务器并由本地计算机触发,您可以随时

ssh user@ip 'sudo /bin/bash /home/[user]/server.sh'

这也可以。您也可以使用“scp”命令复制脚本,然后再次使用 ssh 将其删除,以实现自动化的单脚本方法。

答案 2 :(得分:0)

当您运行命令 sudo -s 时,您更改了用户,脚本的其余部分将丢失,因为它在一个新的 shell 中。

删除行 sudo -s 并再次尝试运行脚本。

注意:请务必记住,运行 sudo 的用户必须位于具有 /etc/sudoers 权限的 username ALL=(ALL) NOPASSWD:ALL 文件中。

相关问题