J'ai un script de shell interactif qui, à un endroit, doit ssh sur 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 à distance doit s'exécuter comme indiqué dans le script):
# ...
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 assez clair. Mais comment puis-je contourner cela? Quelque chose comme ça devrait arriver:
$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:
/bin
/etc
/var
ls
la sortie contiendra par exemple des terminaisons \ r \ n.ls | cat
va faire - il va voir que stdout est un tuyau. Dans cette question spécifique, ce n'est pas pertinent, car il est apparemment destiné à être exécuté de manière interactive depuis un terminal - vous voulez donc probablement les colonnes et les couleurs, etc.Cette méthode exécutera un seul script en utilisant sudo après ssh:
Supposons que nous avons un utilisateur "distant" avec des capacités sudo et que nous souhaitons exécuter un script en tant que root.
1) Définissez un script dans / 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":
Normalement, le mot de passe sera demandé deux fois: ssh login + sudo. Si vous souhaitez le saisir une seule fois, essayez sudo sans mot de passe (non recommandé). <- s'il vous plaît lire le commentaire Boldewyn.
Le principal avantage est que "ssh" ne nécessite aucun autre paramètre (en tant que -t) et que sudo est forcé côté serveur. De plus, une fois le script terminé, l'utilisateur est également déconnecté.
Ce n'est peut-être pas si élégant, mais c'est simple et ça marche.
la source
sudoers
fichier sur un serveur comme celui-ci est une catastrophe imminente. Si quelqu'un y accède en tant qu'utilisateur (par exemple via le serveur Web), il peut immédiatement devenir root. Merci, mais je cherchais des solutions qui ne placent pas ma configuration de serveur en contradiction. Si vous aviez une solution qui réutilise magiquement l'authentification de SSH pour lasudo
commande, je serais plus intéressé (et commencerais peut-être à chercher des remplaçants pour SSH ...).Vous pouvez exécuter la commande suivante pour obtenir un accès root sans interactivité:
la source