如何以提升的权限远程执行 shell 脚本

如何以提升的权限远程执行 shell 脚本

我有两台服务器,服务器A服务器B

目前我在上面运行一个shell脚本服务器A创建一个文件并且‘推动’它到服务器B。 shell 脚本作为 cron 每小时运行一次并且需要SUDO权限。

但是,由于我们的设置发生了变化,我无法再'推'该文件来自服务器A服务器B,而我现在需要'拉'该文件来自服务器B服务器A

有没有'正确的'连接到远程服务器并执行需要提升权限的脚本的方式?但不必在 shell 脚本中写下密码服务器B

答案1

你有一些选择。以下是一些建议:

  1. 使用基于证书的身份验证从 serverB 连接到 root@serverA,并在该服务器上的根上下文中运行脚本。

    scp然后,您可以使用相同的基于证书的身份验证来通过或拉回生成的文件rsync。缺点是您在 serverB 上的帐户可以完全无限制地访问 root@serverA。然而,在严格管理的环境中,这可能是可以接受的。

  2. 使用基于证书的身份验证从 serverB 连接到 root@serverA,该身份验证将连接限制为运行单个命令 - 您的脚本。

    如果命令将其文件输出到标准输出它可以直接从从 serverB 到 root@serverA 的会话中捕获,ssh无需在脚本完成后传输文件。您在 serverB 上的帐户无法任意访问 root@serverA。

    ~root/.ssh/authorized_keysroot@serverA 在其文件中运行该命令所需的条目示例bake可能如下所示:

    ssh-rsa AAAAB3Nza...Fr9FvN me@roaima,command="/usr/local/bin/bake",no-agent-forwarding,no-port-forwarding,no-X11-forwarding
    
  3. 从 serverB 连接到 serverA,并用于sudo运行脚本。您可以配置sudo为允许单用户帐户以 root 身份运行脚本,但不需要密码。

    中的此条目/etc/sudoers将允许用户“roaima”使用以下命令以 root 身份运行带或不带参数的命名脚本sudo /usr/local/bin/bake --fruit=apple,blackberry --type=pie

    roaima ALL = NOPASSWD: /usr/local/bin/bake
    
  4. 使用触发器进行更复杂的事情,例如连接到 serverA 上定义的 TCP 端口并触发脚本,以 root 身份运行。

    这确实意味着任何可以访问 serverA 上的 TCP 端口的人都可以启动您的脚本,因此您需要考虑 DDOS 问题并防止同时运行脚本的多个实例。然而,这将消除需要任何serverA 上的交互式根访问 - 即使是通过sudo.

答案2

您可以连接到服务器Bvia ssh,然后运行sudo以提升权限执行您的脚本。您可以配置sudo不要求输入密码。

相关内容