【问题标题】:execution of remote script containing "sudo su" through ssh [duplicate]通过 ssh 执行包含“sudo su”的远程脚本 [重复]
【发布时间】:2021-06-13 17:40:35
【问题描述】:

我需要运行一个需要以 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”命令。这种行为的原因是什么,有解决办法吗?

【问题讨论】:

  • sudo 通常会提示输入用户密码。听起来你的脚本卡在那里了。
  • 您是否有权访问 远程服务器 上的root 用户?如果是,则使用该登录,否则使用普通用户登录,您将无法访问root
  • 我的 root 用户不需要密码。当我登录时,“sudo su”会自动将终端转换为根终端。但是我想从本地计算机运行脚本并自动执行此过程。
  • 你应该删除sudo -s,它是块
  • 如果我删除了,我怎样才能拥有root权限并自动化呢?

标签: linux bash ssh scripting root


【解决方案1】:

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

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

【讨论】:

  • 我正在尝试配置 openvpn 服务器。在配置时,此过程会创建一个需要 root 权限的文件夹。由于没有sudo cd命令,请问有没有办法在shell脚本中间切换到root用户。
【解决方案2】:

你可以使用

ssh user@ip '[command]'

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 2014-08-27
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多