Como executar mudanças no servidor remoto como root?

8

Eu estou querendo saber se existe uma maneira de executar um script / comandos da máquina local sem fazer nenhuma modificação como root na máquina remota?

Algumas informações

Estou tentando configurar algumas tarefas via Capistrano e preciso de sudo access. Existem cerca de 30 servidores e para eu atualizar manualmente /etc/sudoers será doloroso, então eu queria saber se existe um método para atualizar este arquivo remotamente?

    
por kaizenCoder 29.04.2014 / 09:16

4 respostas

17

Você pode executar scripts locais remotamente, executando bash no sistema remoto e alimentando seu script

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

Editar

Para executar comandos que exigem o uso de sudo em uma máquina remota, use a opção ssh's -t e passe os comandos para ssh . A opção -t aloca um psuedo tty e permite a interação do usuário com os comandos executados por ssh , como inserir um senha para sudo

$ ssh user@host -t 'sudo foo'

Para modificar um arquivo usando este método sed é recomendado sobre um redirecionamento > porque o redirecionamento de shell não permite a gravação de arquivos ao usar sudo . Além disso, todas as variáveis no comando sed precisam ser escapadas quando forem passadas para ssh .

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

Para automatizar tudo:

#!/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
    
por 29.04.2014 / 17:45
1

Eu achei o comando tee útil para evitar a limitação de sudo no redirecionamento de arquivos. O uso do sed provou ser frustrante devido aos requisitos de escape do personagem.

Este é o comando que usei para anexar remotamente os hosts de todas as máquinas no meu cluster a / etc / hosts:

for i in {1..10}; do ssh [email protected].$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"

A saída para cada iteração é semelhante a:

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

Essa resposta da SU foi fundamental na criação da minha solução final: link

    
por 29.09.2016 / 21:44
1

Se você precisar executar vários comandos ou redirecionamentos, use a seguinte sintaxe:

ssh server.com "sudo sh -c 'ps aux | grep jav > /root/1.txt'"
    
por 06.04.2017 / 17:32
0

Você teria que ter algum tipo de acesso ao nível de raiz, seja por meio de root passwd direto ou de sua configuração de regra sudo de id de usuário antes de tentar modificar o arquivo sudoers.

    
por 26.02.2015 / 23:16

Tags