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


8

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

一些背景

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


您可以使用面料具有远程交互。您可以使用fabric.contrib.files.sed方法并行执行相同操作而无需交互。
lcipriani 2014年

如果您要管理30台服务器,我强烈推荐SaltStack
Wayne Werner

Answers:


18

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

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

编辑

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

$ ssh user@host -t 'sudo foo'

sed建议通过重定向使用此方法修改文件,>因为使用时shell重定向不允许写入文件sudo。此外,将sed命令中的所有变量传递到时都需要转义ssh

$ ssh user@host -t 'sudo sed -i "\$a text to insert" /path/to/file'

要使整个过程自动化:

#!/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

感谢您的脚本和所有脚本,但它并不能真正回答我的问题。如果/etc/sudoers由于root用户权限而希望修改文件,它将失败。
kaizenCoder 2014年

@aspiringCodeArtisan看到编辑答案

嗨,即使如此,系统也会提示您输入一个sudo密码,据我了解该密码设置为/etc/sudoers
kaizenCoder 2014年

1
@aspiringCodeArtisan如果您的帐户没有sudo在这些计算机上的权限,则要进行修改,/etc/sudoers您将必须通过ssh登录为root。因此命令将是ssh root@host -t 'sed -i "\$a text to insert" /path/to/file'
Creek

默认情况下,root ssh登录是禁用的,因此它不是一个选项。我想我可能正在寻求不可能。
kaizenCoder 2014年

1

我发现该tee命令有助于避免文件重定向的sudo限制。由于字符转义要求,使用sed被证明令人沮丧。

这是我用来将集群中所有计算机的主机远程追加到/ etc / hosts的命令:

for i in {1..10}; do ssh ubuntu@10.1.1.$i -t "echo '10.1.1.1 dev-1    
10.1.1.4 dev-4
10.1.1.3 dev-3
10.1.1.2 dev-2
10.1.1.6 dev-6
10.1.1.8 dev-8
10.1.1.5 dev-5
10.1.1.10 dev-10
10.1.1.9 dev-9
10.1.1.7 dev-7' | sudo tee -a /etc/hosts >/dev/null"

每次迭代的输出如下所示:

0+1 records in
0+1 records out
255 bytes (255 B) copied, 4.1338e-05 s, 6.2 MB/s

SU的答案对于构建我的最终解决方案至关重要:https : //superuser.com/a/1026359/587485


1

如果需要运行多个命令或重定向,则应使用以下语法:

ssh server.com "sudo sh -c 'ps aux | grep jav > /root/1.txt'"

0

在尝试修改sudoers文件之前,您必须已经通过直接root passwd或用户ID sudo规则设置具有某种根级别访问权限。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.