Contexto
Eu quero configurar rsync
backups do meu servidor, então eu corro o seguinte comando
rsync -r -e ssh --rsync-path="sudo rsync" [email protected]:/ /backup/
Idealmente, esse comando perguntaria a minha senha privada da chave ssh, depois conectaria, depois perguntaria a senha sudo para rsyncuser e então executaria o rsync no servidor. Mas eu tenho o erro infame:
sudo: no tty present and no askpass program specified
Então eu tive que adicionar isso a /etc/sudoers
(usando sudo visudo
), que basicamente dá acesso total de leitura e gravação sem senha ao sistema para o usuário rsyncuser
, o que não é do meu gosto:
rsyncuser ALL= NOPASSWD:/usr/bin/rsync
Pergunta
Como eu posso dizer ao sudo para ler sua senha de, digamos, outro TTY?
Dessa forma, eu poderia executar rsync
em uma janela de terminal em minha máquina local, e usar outra janela de terminal para abrir uma conexão ssh (possivelmente separada) para o servidor e fornecer a senha sudo lá.
A única maneira de pensar em fazer algo assim seria usar um script expect
em torno do sudo, que lê a senha de um pipe nomeado, e eu gravaria nesse pipe a partir do outro terminal.
Nota: isto é mais para promover e aprender do que qualquer propósito prático, Eu não estou tentando descobrir como usar o sudo com o rsync , eu já li tudo o que pude encontrar sobre isso.