cópia de script de arquivos de propriedade da raiz remota quando 'PermitRootLogin no'

5

Estou configurando um nó de nuvem (somente ssh acessível, GUIs obsoletas, executando o Debian 7) com 'PermitRootLogin no' para segurança. Para alguns aplicativos, desejo copiar alguns arquivos de configuração de propriedade da raiz do remoto para o local (por exemplo, para configurar um cliente local). E, por questões de reprodutibilidade, eu quero roteirizar isso (tendo já feito as operações algumas vezes a partir de linhas de comando malformadas). Qual é a melhor prática para habilitar a obtenção remota do sudo de um script (e, sim, eu sei que vou digitar a senha - completa não-interatividade seria bom mas não é um requisito), dado 'PermitRootLogin no' (e sem acesso físico)? Algumas coisas que eu tentei:

(1) scp : falha porque não sei dizer scp Quero ser sudo remotamente. (AFAICS - estou faltando alguma coisa?)

(2) nua rsync-path : eu tentei

me@local ~ $ rsync --rsync-path='sudo rsync' remote:/path/to/file ${HOME}/backups/cloud_9/path/to/file
X11 forwarding request failed on channel 0
sudo: no tty present and no askpass program specified
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
...

Alguém pode ativar um askpass não gráfico? Casual DuckDuckGo -ing não encontrou. Nota rsync-path vai (IIRC) trabalhar com 'visiblepw' mas não nua / sem.

(3) sudoers.d/visiblepw : DDG encontrado

http://www.sudo.ws/pipermail/sudo-users/2009-August/004142.html
> [sudo-users] Error: sudo: no tty present and no askpass program specified
> Todd C. Miller Todd.Miller at courtesan.com
> Mon Aug 3 10:43:04 EDT 2009

> Recent versions of sudo will refuse to prompt for a password if no tty is present,
> since it is not possible to turn off echo in this case. You can [enable this]
> with a line like:

> Defaults visiblepw

então criei

me@remote:~$ sudo cat /etc/sudoers.d/visiblepw 
> Defaults  visiblepw

que funciona, mas, como observado, echo s pw quando sudo ing remotamente ... mas agora eu posso, por exemplo, ssh remote 'sudo whatever' ... contanto que ninguém consiga ver a minha concha :-)

Eu gostaria de saber, existe uma maneira melhor de fazer isso? Estou esquecendo de algo? Note novamente, eu quero que funcione a partir de um script.

Mais uma coisa (anotada enquanto escrevo), que encontrei enquanto escrevia, e não tentei, porque parece feia:

(4) mkfifo hoop-jumping : parece feio e pouco roteirizado. Estou faltando alguma coisa?

    
por TomRoche 23.09.2014 / 00:05

1 resposta

1

A melhor maneira de fazer isso pode ser Ansible - uma ferramenta de gerenciamento de configuração que interage com os remotos via ssh. Isso simplifica muito a tarefa de autenticação do ssh e sudo ou su no controle remoto.

Com Ansible instalado e um inventário de host configurado, o comando para executar esta operação é:

ansible remotehost -m fetch -a "src=/etc/sudoers dest=remote-soduers" -u root --sudo --ask-sudo-pass

Se você precisar configurar um inventário básico:

cat > hosts <<EOF
[remotes]
remotehosts
EOF
ansible -i hosts remotehost -m fetch -a "src=/etc/sudoers dest=remote-soduers" -u root --sudo --ask-sudo-pass

Como alternativa, um comando rápido de uma só vez pode ser realizado usando a opção '-t' em ssh para forçar a alocação pseudo-terminal:

ssh -t remotehost "sudo rsync -av /path/on/remote localuser@localhost:/path/on/local"

Isso provavelmente resulta em dois prompts de senha: um para o sudo e outro para a conexão de volta ao local a partir do root @ remote.

    
por 23.09.2014 / 01:17

Tags