Rsync su SSH che non viene presentato

Sto utilizzando il seguente command nella crontab di root su Debian.

rsync -vqrlHEAXogDtzhi --log-file=${LOG} --progress --rsync-path="sudo /usr/bin/rsync" --exclude-from=$CONFIG_DIR/excludes -e "ssh -i /home/backups/.ssh/id_rsa" backups@${HOSTNAME}:/ ${BACKUP_DIR} 

E ho la seguente:

 sudo: no tty present and no askpass program specified 

Ho provato a aggiungere -t al command ssh e ottengo:

 Pseudo-terminal will not be allocated because stdin is not a terminal. 

Ho provato ad aggiungere -t -t al command ssh e ottengo:

 protocol version mismatch -- is your shell clean? 

Ho aggiunto un .hushlogin all'utente di backup nella casella remota e ho confermato che posso utilizzare ssh come backup utilizzando un tasto nella casella remota con niente visualizzato (il login è silenziato). Ho ancora questi messaggi.

Notare che posso utilizzare ssh come backup per la casella remota utilizzando un tasto correttamente.

Notare che il mio sudo non dispone dell'opzione -tt.

Notare che il seguente è impostato nel file / etc / sudoers di origine e destinazione:

 backups ALL= NOPASSWD:/usr/bin/rsync 

Si noti che il file / etc / sudoers non ha alcun riferimento a:

 Defaults requiretty 

Notare che non ho eco la mia password nel command.

Come posso pelle questo gatto? : |

Grazie

  • bash: / etc / hosts: Permesso negato
  • ubuntu: consente a un utente di eseguire uno script con autorizzazioni di root
  • Accesso Grep su maillog per non root
  • utilizzare Sudo in apache
  • Lost sudo password senza accesso root
  • Come posso usare il sudo quando ho eseguito l'accesso con una chiave SSH in PuTTY?
  • come fonte con sudo -u
  • Come configurare i suderi per mantenere sempre la variabile di envrionment LD_LIBRARY_PATH?
  • 4 Solutions collect form web for “Rsync su SSH che non viene presentato”

    A volte pensi troppo alle cose.

    Rsync non è stato installato sul sistema remoto.

    / facepalm

    1. Non è necessario sudo se il lavoro cron esce da root.
    2. C'è una serie di bandiere inutili: -rlptgoD ; rimuovere e sostituire con -a .
    3. Il messaggio TTY da sudo è per il TTY locale mentre l'opzione -t per ssh è per il TTY remoto . Non confondere i due.
    4. Non -v e -q contraddicono l'un l'altro?
    5. L'ultima preoccupazione dovrebbe essere se la chiave privata SSH locale sia crittografata o less. Il primo non può essere utilizzato con corse automatiche (ad esempio, quelle in cui stdin non sono TTY, non vengono eseguite da un terminal o da un emulatore terminal).

    MODIFICA / AGGIORNAMENTO :

    • Ritengo 1 e 2.
    • 3 dovrebbe essere circa che non ci sia TTY locale quando cron è in esecuzione, e SSH non lo assegna in remoto poiché non c'è un locale.

    Immagino che sia un problema chiave di ssh. La chiave privata del backup ha una frase di passaggio o la chiave pubblica non è nel keychain degli utenti remoti. Forse il tuo tentativo precedente ha usato un tasto già caricato nel tuo portchiavi?

    Mettere questo in modo da poter ricordare e condividere questo trucco:

     rsync -av -e "ssh -tt" --rsync-path="stty raw -echo; sudo /usr/bin/rsync" user@${HOSTNAME}:/ ${DEST_DIR} 

    Questo metodo sembra ignorare il requisito per un tty come eseguito su un file predefinito /etc/sudoers un sistema con Defaults requiretty . Queste informazioni sono state create dopo aver esaminato questa domanda e risposte SO .

    In questa risposta, essi consigliano di rimuovere gli Defaults requiretty da /etc/sudoers . Questo è il metodo più semplice. Tuttavia, se non è ansible modificare l'host remoto /etc/sudoers per rimuovere questa opzione di configuration, è ansible provare a forzare il rsync locale per utilizzare ssh -tt . Questa opzione per ssh è descritta nella pagina del manuale del client ssh come questa:

    Forza l'assegnazione di pseudo-terminal. Questo può essere utilizzato per eseguire programmi arbitrari basati su schermo su una macchina remota, che può essere molto utile, ad esempio durante l'attuazione dei servizi di menu. Le opzioni multiple-t consentono l'assegnazione di tty, anche se ssh non dispone di un tty locale.

    Quindi, forzoniamo ssh per assegnare un pseudo-tty per evitare l'errore:

     Pseudo-terminal will not be allocated because stdin is not a terminal. stty: standard input: Inappropriate ioctl for device sudo: sorry, you must have a tty to run sudo 

    Quindi, il --rsync-path viene sovrascritto con un command per eseguire le seguenti operazioni:

     stty raw -echo; sudo /usr/bin/rsync 

    stty raw -echo è impostare la disciplina di linea del terminal remoto come passare attraverso. Questo rende effettivamente il comportmento come un pipe che verrà utilizzato invece di un pseudo-terminal senza -tt .

    Quindi il command rsync remoto sarà sudo /usr/bin/rsync , che ora ha un pseudo-tty e passerà il controllo richiesto per sudo .

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.