copy de script de files racine distants lorsque 'PermitRootLogin no'

Je suis en train de mettre en place un nœud cloud (uniquement les interfaces GUI ssh accessibles, obsolètes, exécutant Debian 7) avec 'PermitRootLogin no' pour la security. Pour certaines applications, je veux copyr certains files de configuration appartenant à la racine de la télécommand au local (par exemple, pour configurer un client local). Et, pour la reproductibilité, je veux écrire ce script (ayant déjà des choses à plusieurs resockets sorties de lignes de command malformées). Quelle est la meilleure pratique pour permettre d'get sudo distance à partir d'un script (et, oui, je sais que je vais hafta taper le mot de passe– non-interactivité complète serait bien, mais n'est pas une exigence), «PermitRootLogin non» access)? Certaines choses que j'ai essayé:

(1) scp : échoue car je ne peux pas dire scp je veux être sudo distance. (AFAICS – Ai-je oublié quelque chose?)

(2) rsync-path nu: j'ai essayé

 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] ... 

Peut-on activer un askpass non-graphique? Casual DuckDuckGo -ing n'a pas trouvé. Notez que rsync-path va (IIRC) travailler avec 'visiblepw' mais pas à nu / sans.

(3) sudoers.d/visiblepw : DDG trouvé

 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 

alors j'ai créé

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

qui fonctionne, mais, comme indiqué, echo s pw lors de la sudo distance … mais maintenant je peux, par exemple, ssh remote 'sudo whatever' … aussi longtime que personne ne peut voir ma coquille 🙂

J'aimerais savoir, y a-t-il une meilleure façon de faire cela? Suis-je oublié quelque chose? Notez encore, je veux que cela fonctionne à partir d'un script.

Encore une chose (noté en écrivant), que j'ai trouvé en écrivant, et que je n'ai pas essayé, parce que ça a l'air moche:

(4) mkfifo hoop-saut : semble moche et pas tout à fait scriptable. Suis-je oublié quelque chose?

Ansible – un outil de gestion de configuration qui interagit avec les télécommands via ssh. Cela simplifie grandement la tâche d'authentification ssh et sudo ou su sur la télécommand.

Avec Ansible installé et un inventaire hôte configuré, la command pour effectuer cette opération est la suivante:

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

Si vous devez configurer un inventaire à l'état brut:

 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 

Alternativement, une command rapide peut être accomplie en utilisant l'option '-t' sur ssh pour forcer l'allocation pseudo-terminale:

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

Il en résulte très probablement deux invites de mot de passe: une pour le sudo et une pour la connection dans le local à partir de root @ remote.