如何以 root 身份在远程服务器上执行更改?

kai*_*der 8 root sudo

我想知道是否有一种方法可以从本地机器执行脚本/命令,而无需在远程机器上以 root 身份进行任何修改?

一些背景

我正在尝试通过 Capistrano 设置一些任务,但我需要sudo访问权限。大约有 30 多台服务器,对我来说手动更新/etc/sudoers会很痛苦,所以我想知道是否有一种方法可以远程更新此文件?

Cre*_*eek 19

您可以通过bash在远程系统上执行并将脚本提供给它来远程运行本地脚本

$ ssh user@host 'bash -s' < script.sh

编辑

要执行需要sudo在远程机器上使用ssh's -t的命令,请使用选项并将命令传递给ssh. 该-t选项分配一个伪 tty并允许用户与 运行的命令进行交互ssh,例如输入密码sudo

$ ssh user@host -t 'sudo foo'
Run Code Online (Sandbox Code Playgroud)

sed建议使用此方法修改文件而不是重定向,>因为 shell 重定向在使用sudo. 此外,sed命令中的所有变量在传递给ssh.

$ ssh user@host -t 'sudo sed -i "\$a text to insert" /path/to/file'
Run Code Online (Sandbox Code Playgroud)

自动化整个过程:

#!/bin/bash
SERVERS=( server1 server2 server3 )

for HOST in ${SERVERS[@]}; do 
    ssh user@${HOST} -t 'sudo sed -i "\$a text to insert" /path/to/file'

    if [[ $? -ne 0 ]]; then
        echo "ERROR: $HOST did not complete"
     else   
        echo "$HOST complete"
    fi   
done
Run Code Online (Sandbox Code Playgroud)