Como copiar o / etc / hosts para todas as minhas máquinas?

2
import os, sys, time

servers = ['dev','admin','db1']
for s in servers:
    cmd = 'scp /etc/hosts regular_user@%s:/etc/hosts' % s
    print cmd
    os.system(cmd)

Eu escrevi este script para copiar meu arquivo HOSTS atual para todos os meus outros servidores. No entanto, eu gostaria de fazer isso de um usuário comum, não ROOT.

Como over-writing / etc / hosts cria priveligias raiz, eu gostaria de fazer SUDO . Como posso colocar o sudo dentro desse script?

Isso não funcionará, porque é a permissão negada para alterar o arquivo / etc / hosts.

cmd = 'sudo scp /etc/hosts regular_user@%s:/etc/hosts' % s
    
por Alex 01.11.2009 / 05:22

5 respostas

6

cat /etc/hosts | ssh otherhost "sudo sh -c 'cat >/etc/hosts'" fará o truque.

    
por 01.11.2009 / 06:10
1

Você precisa fazer o sudo no host remoto em vez de localmente. Obviamente, para que isso funcione, sua conta no host remoto precisará de permissões sudo para executar o comando de cópia relevante. Seria algo parecido com isto:

cmd = 'scp /etc/hosts regular_user@%s:/tmp/hosts' % s
os.system(cmd)
cmd = 'ssh regular_user@%s sudo cp /tmp/hosts /etc/hosts' % s
os.system(cmd)

Você pode achar que usar uma estrutura como fabric ou um sistema de gerenciamento de configuração como o cfengine ou o fantoche é uma opção melhor a longo prazo ...

    
por 01.11.2009 / 05:36
1

Isso é feito facilmente usando o Paramiko (o cliente SSH nativo do Python) em vez de chamar o comando ssh.

  • Use o Paramiko para scp o arquivo para / tmp no remoteserver
  • Use o Paramiko para executar o 'sudo cp / tmp / hosts / etc / hosts' no servidor de remoção.

Existem muitos exemplos de Paramiko sendo usados para scp e para executar comandos com sudo, disponíveis na web.

    
por 01.11.2009 / 11:38
0

O que você provavelmente quer fazer é ativar o bit suid neste arquivo, que deve ser de propriedade de root. Então, sempre que um usuário não privilegiado executar o script, ele será executado como superusuário

    
por 01.11.2009 / 05:28
0

O problema aqui é que você está tentando copiar um arquivo para um servidor remoto como um usuário não privilegiado (usando suas credenciais de login com o comando scp ).

Para aproveitar o sudo no computador remoto, você precisa executar um comando para iniciar a transferência. Pode parecer algo assim:

ssh [email protected] sudo scp [email protected]:/etc/hosts /etc/hosts

Isso essencialmente faz o logon no computador remoto como um usuário comum e, em seguida, emite o comando sudo para copiar o arquivo do computador local para o remoto. A lógica scp parecerá um pouco para trás, já que está sendo executada da perspectiva do host remoto.

Você pode ter que fazer algum trabalho para que o ssh aceite as senhas do seu script, no entanto. Especialmente desde que você está logando em um computador remoto e dizendo para ele logar de volta em seu computador local.

    
por 01.11.2009 / 05:31