Contexto

Contexto

Contexto

Quero configurar rsyncbackups do meu servidor, então executo o seguinte comando

rsync -r -e ssh --rsync-path="sudo rsync" [email protected]:/ /backup/

Idealmente, esse comando solicitaria a senha da minha chave ssh privada, conectaria, solicitaria a senha sudo para rsyncuser e executaria o rsync no servidor. Mas recebi o erro infame:

sudo: no tty present and no askpass program specified

Então eu tive que adicionar isso a /etc/sudoers(using sudo visudo), que basicamente dá ao usuário acesso completo de leitura e gravação sem senha ao sistema rsyncuser, o que não é do meu gosto:

rsyncuser ALL= NOPASSWD:/usr/bin/rsync

Pergunta

Como posso dizer ao sudo para ler sua senha, digamos, de outro TTY?

Dessa forma, eu poderia executar rsyncem uma janela de terminal em minha máquina local e usar outra janela de terminal para abrir uma conexão ssh (possivelmente separada) com o servidor e fornecer a senha sudo lá.

A única maneira de fazer algo assim seria usar um expectscript em torno do sudo, que lê a senha de um canal nomeado, e eu escreveria nesse canal a partir do outro terminal.

Nota: isso é mais para fins de experimentação e aprendizado do que qualquer propósito prático,Não estou tentando descobrir como usar o sudo com o rsync, já li tudo o que pude encontrar sobre isso.

Responder1

sudoirá ler uma variável de ambiente, SUDO_ASKPASSse ela não estiver sendo executada em um terminal (como no seu caso) ou se -A estiver definido. Ele usa isso como um comando para executar para obter a senha. Por exemplo:

echo -e '#!/bin/sh\nhead -n 1' > ~/bin/reader
chmod a+x ~/bin/reader
export SUDO_ASKPASS="$HOME/bin/reader"
sudo -A echo "I'm root\!"

Solicitará a senha no stdin e não exigirá um terminal.

No entanto, no caso específico do que você está tentando fazer, talvez seja melhor permitir o login SSH root, mas apenas com uma chave SSH e o comando restrito ao rsync. Existe um bom recurso sobre issoaqui.

Responder2

Tentar:

ssh userfoo@host "sudo -S p'enter pw: ' [command] "

Isso emitirá um prompt de senha (" enter pw:") que será exibido em seu host/terminal local. A desvantagem disso é o risco de segurança de sua senha ser exibida de forma clara na janela do terminal. Ele não será salvo em seu local .bash_history, mas é o histórico de rolagem da janela do terminal. Então, se você estiver usando o Konsole, por exemplo, use Ctrl+ Shift+ Kpara limpar isso.

informação relacionada