ssh sudo… non interactif… demande le mot de passe en clair

9

J'exécute des commandes ssh non interactives. L'authentification ssh est prise en charge par le biais de l'agent ssh, mais si j'exécute une commande nécessitant sudo, l'invite de mot de passe de mon terminal est en texte brut. Par exemple:

ssh remotemachine "sudo -u www mkdir -p /path/to/new/folder"

me demandera le mot de passe en texte brut. Est-ce que quelqu'un sait comment je peux le faire utiliser l'invite sécurisée normale ou que je peux passer le mot de passe via un commutateur? (car je peux alors configurer une invite sécurisée de ce côté avant d’envoyer la commande)

Toute aide est très appréciée.

Iain
la source

Réponses:

13

Utiliser ssh -t:

homme ssh

-t   Force pseudo-tty allocation. This can be used to execute arbitrary 
     screen-based programs on a remote machine, which can be very useful, 
     e.g. when implementing menu services. Multiple -t options force tty 
     allocation, even if ssh has no local tty.

Donc, votre commande sera

ssh remotemachine -t "sudo -u www mkdir -p /path/to/new/folder"

Si vous ne souhaitez pas entrer de mot de passe, vous pouvez (si vous y êtes autorisé) modifier à l' sudoersaide de la commande visudo.

Ajouter un paramètre NOPASSWD:, par exemple

username ALL=(ALL) NOPASSWD: /bin/mkdir

Si vous ne pouvez pas éditer / etc / sudoers, vous pouvez utiliser sudo -S:

homme sudo

-S      The -S (stdin) option causes sudo to read the password from
        the standard input instead of the terminal device.  The
        password must be followed by a newline character.

Avec cela, la commande serait

echo "your_password" | ssh remotemachine -t \
     "sudo -S -u www mkdir -p /path/to/new/folder"

N'oubliez pas que ceci ajoutera votre mot de passe pour commander l'historique de votre shell (avec bash, ce serait ~/.bash_historyfichier).

Olli
la source