définir la variable d'environnement SSH_ASKPASS ou askpass dans sudoers, resp
Je suis en train d'essayer de se connecter à un serveur ssh et d'exécuter quelque chose comme:
ssh user@domain.com 'sudo echo "foobar"'
Malheureusement, je reçois une erreur:
sudo: no tty present and no askpass program specified
Google m'a dit soit de définir la variable d'environnement SSH_ASKPASS
ou pour définir askpass
dans le sudoers
fichier. Ma machine à distance est en cours d'exécution sur Debian 6 et j'ai installé les paquets ssh-askpass et ssh-askpass-gnome et mon sudoers
fichier ressemble à ceci:
Defaults env_reset
Defaults askpass=/usr/bin/ssh-askpass
# User privilege specification
root ALL=(ALL) ALL
user ALL=(ALL) ALL
Quelqu'un peut dire ce que je fais mal et comment le faire mieux.
source d'informationauteur jan
Vous devez vous connecter pour publier un commentaire.
Il y a deux façons de se débarrasser de ce message d'erreur. Le moyen le plus facile est de fournir un pseudo terminal à distance sudo processus. Vous pouvez le faire avec l'option
-t
:Plutôt que d'allouer un ATS, ou la configuration d'un mot de passe qui peut être vu dans la ligne de commande, faire quelque chose de ce genre.
Créer un fichier shell qui se font l'écho de votre mot de passe comme d':
puis le copier dans le nœud que vous souhaitez à l'aide de
scp
comme ceci:Puis, quand vous
ssh
procédez de la manière suivante:Une autre façon est de faire fonctionner
sudo -S
pour "Écrire l'invite à la norme de l'erreur et de lire le mot de passe à partir de l'entrée standard au lieu d'utiliser le terminal" (selonman
) aveccat
:Il suffit de saisir le mot de passe lorsque vous y êtes invité.
Un avantage est que vous pouvez rediriger la sortie de la commande à distance d'un fichier sans l' "[sudo] password for...":
EDITION Décembre 2013:
Voici une courte réponse: Prendre un jour ou deux pour vous familiariser avec la bibliothèque Python "Tissu". Tissu résout une tonne de questions en rapport avec le dispatching des tâches distantes de 1 ou plusieurs serveurs.
Vous n'aurez probablement encore souhaitez configurer un nom d'utilisateur sur le système cible qui peut courir sans mot de passe des commandes (et vous pouvez utiliser le Tissu pour le faire aussi!).
Méfiez-vous cependant que certains aspects de Tissu ne sont pas parfaitement Pythonic. Aussi, le Tissu a été conçu d'abord avec les administrateurs système à l'esprit, les gens qui veulent les commandes de traitement contre les serveurs. Si vous essayez de faire quelque chose d'autre (comme d'automatiser certaines très spécifiques des serveurs ou des scénarios de), vous aurez envie de comprendre comment les "paramètres" et/ou @rôles décorateur travaille. Je n'ai pas regardé en arrière...
(Et oui, j'ai eu à distance SSH commandes de travail sur "remote". Le serveur A demande à B de serveur pour se connecter au serveur C, et le retour de la commande est vu sur Un serveur même si il ne parle pas directement au serveur C. Fait de la configuration du laboratoire de plus facile!).
Original de la réponse:
Il y a BEAUCOUP de solutions à ce problème. Chevaux pour les cours; certaines sont meilleures que d'autres dans différentes situations.
La question est, comment faire pour résoudre le "no TTY" erreur. Cela semble être le focus donc je suppose que le discours sur les sudoers est juste une tentative de solution de contournement pour éviter l'ATS question.
Option 1) Askhat réponse fonctionne très bien... la plupart du temps. En fait, toujours spécifier "-tt" qui fonctionne sur plusieurs systèmes cibles.
Remarque vous vont encore frapper le problème si vous utilisez SSH bibliothèque comme Paramiko, qui ne dispose pas d'un moyen intuitif de le faire "-t".
Option 2) Ma réponse est de spécifier un ASKPASS qui est de l'entrée standard. Pour cet exemple satisfasse à la fois le mot de passe sudo de l'exigence et de l'ATS:
$ shell> ssh [email protected] 'echo "mot de passe"|sudo -S echo "toto"'
Option 3) Oui, vous pouvez désactiver le mot de passe sudo vérifie sur tout ou partie des utilisateurs, mais ce n'est pas cool sur un serveur de production.
Option 4) Vous pouvez à distance "requiretty" (ou "!requiretty" pour tout ou partie des utilisateurs dans sudoers. Encore une fois, de ne pas laisser refroidir sur une boîte de production.
Il est préférable d'éviter de faire des modifications de serveur. Un jour que le serveur sera remplacé, les paramètres de retourner à la valeur par défaut, et votre script d'arrêt de travail.
Noter qu'une fois que vous comprenez toutes vos options, il ouvre les portes à beaucoup plus d'automatisation (par exemple un script sur votre ordinateur portable peut se connecter à une liste de serveur de noms de domaine et d'effectuer sudo tâches SUR ces serveurs, sans avoir à copier ces scripts sur les serveurs).
Comment à propos de l'ajout dans le fichier sudoers: