cat /etc/hosts | ssh otherhost "sudo sh -c 'cat >/etc/hosts'"
fará o truque.
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
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 ...
Isso é feito facilmente usando o Paramiko (o cliente SSH nativo do Python) em vez de chamar o comando ssh.
Existem muitos exemplos de Paramiko sendo usados para scp e para executar comandos com sudo, disponíveis na web.
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
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.