48 votes

SSH : exécuter la commande sudo

J'ai un Shell Shell interactif qui, à un moment donné, doit se connecter en ssh à une autre machine (basée sur Ubuntu) et exécuter quelque chose en tant que root (l'utilisateur doit entrer son mot de passe, mais la commande distante doit s'exécuter comme indiqué dans le Shell) :

# ...
ssh remote-machine 'sudo ls'
# ...

Cependant, je reçois toujours ce message d'erreur :

sudo: no tty present and no askpass program specified

OK, c'est très clair. Mais comment puis-je contourner ce problème ? Il devrait se passer quelque chose comme ça :

$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:

/bin
/etc
/var

55voto

scottm Points 349

Le merveilleux ssh a un remède pour tout. Il s'agit d'ajouter le -t pour forcer ssh à allouer un pseudo-tty :

ssh -t remote-server 'sudo ls'

0voto

lepe Points 466

Cette méthode permet d'exécuter un seul script en utilisant sudo après ssh :

Supposons que nous ayons un utilisateur "distant" avec des capacités sudo et que nous ayons un script que nous voulons qu'il exécute en tant que root.

1) Définir un script en /etc/passwd à utiliser lors de la connexion :

remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh

2) Dans "login.sh", nous exécutons le script que nous voulons exécuter en tant que "sudo" :

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
    #Not running as root, so we execute "sudo"
    sudo /usr/local/bin/script.sh
else
    #We are already rooted, so "sudo" is not required.
    /usr/local/bin/script.sh
fi
exit;

Normalement, le mot de passe est demandé deux fois : ssh login + sudo. Si vous souhaitez ne le saisir qu'une seule fois, essayez sudo sans mot de passe (non recommandé). <-- lire le commentaire de Boldewyn.

Le principal avantage est que "ssh" ne nécessite aucun autre paramètre (comme -t), et que sudo est forcé côté serveur. De plus, une fois que le script se termine, l'utilisateur est également déconnecté.

Ce n'est peut-être pas très élégant, mais c'est simple et ça marche.

-1voto

SilentGuy Points 101

Vous pouvez exécuter la commande suivante pour obtenir l'accès à la racine sans interactivité :

ssh server " sudo command" < sudopassword.txt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X