In questi tipi di scenari, lascio la chiave privata non crittografata (tranne forse seduto su un disco che è crittografato), con le autorizzazioni di lettura limitate a root e il cronjob eseguito come root, ma faccio del mio meglio per limitare l'utilità di questo chiave per il compito molto specifico (rispetto al permettere di accedere al computer remoto con accesso completo).
Questo può essere fatto in modo abbastanza semplice configurando ~/.ssh/authorized_keys
per eseguire automaticamente un comando specifico quando si effettua l'accesso utilizzando la chiave specifica.
command="/usr/bin/remote_commands_to_run.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
ssh-rsa AAAAB3Nz...DfE= root@some_client
Vedi questa risposta per altro . Dovresti fare attenzione che i comandi in /usr/bin/remote_commands_to_run.sh
non permettano a un utente malintenzionato di uscire in una shell. Potrebbe anche aver senso creare un account limitato sul computer remoto con una shell di /bin/false
che esegue il comando remoto (ad esempio, inserire la chiave pubblica associata alla chiave privata in authorized_keys
dell'utente limitato).
Come sempre dopo averlo configurato, prova e prova per assicurarti che la chiave non abbia più privilegi di quanti ti aspetti (ad esempio, che sftp non funzioni, che rsync non funzioni, ecc.)
A ulteriore avviso, vedo che il tuo compito specifico è quello di rsync dati (presumibilmente in directory specifiche). Questo è probabilmente fattibile con account limitati (ad esempio, chroot'd per essere in grado di vedere solo quelle directory specifiche senza accesso a una shell). Credo che strumenti come rssh possano essere usati per fare questo; consultare il superutente o il server predefinito per il miglior consiglio.
Dato quello che faccio in questo scenario, monto le directory specifiche come unità di rete (ad es. tramite NFS / sshfs) e poi eseguo il rsync nella directory montata in uno script cron.