web-dev-qa-db-fra.com

pas de tty présent et pas de programme askpass spécifié avec `ssh -A`

J'essaie la commande suivante:

ssh -A user@server 'bash -s' < mylocalscript.sh

Mais obtenez le Sudo: no tty present and no askpass program specified ennuyeux lorsque le script atteint un Sudo. Selon man ssh, -A est supposé transférer l'authentification locale, il devrait donc pouvoir utiliser Sudo sur le serveur distant.

Qu'est-ce que je fais mal/ne comprends pas ..?

2
knownasilya

L'authentification SSH et l'authentification Sudo sont deux ensembles différents d'informations d'identification. L'option -A de la commande ssh s'applique uniquement à SSH. Il offre la possibilité de transférer vos informations d'identification afin que vous puissiez passer de server à un autre système à l'aide de votre clé SSH locale.

À moins que vous ne disposiez de règles Sudo vous permettant d'exécuter des commandes sans mot de passe, le système vous demandera toujours de saisir votre mot de passe, à partir du terminal de votre shell ou à l'aide d'un programme askpass, s'il est configuré de la sorte. Un programme askpass est un programme d'assistance (généralement graphique) qui demande simplement un mot de passe en toute sécurité. Pour vous authentifier auprès de Sudo à distance, vous devez effectuer l'une des deux tâches demandées:

  • Assurez-vous de disposer d’un tty afin que Sudo puisse demander en toute sécurité votre mot de passe sur le serveur. C'est aussi simple que de vous connecter avec ssh -t.

  • Dites à Sudo de demander votre mot de passe en utilisant un programme askpass avec l'option -A sur Sudo (à ne pas confondre avec l'option -A pour ssh!). Cela peut être fait dans votre script, par exemple, avec quelque chose comme:

    export Sudo_ASKPASS=/usr/lib/openssh/gnome-ssh-askpass
    Sudo -A ...
    

Notez que puisque vous dirigez votre script Shell vers le flux d’entrée standard de la connexion SSH, Sudo ne pourra pas demander de manière sécurisée un mot de passe. Si l'envoi du script via l'entrée standard SSH de cette manière est une exigence (au lieu de simplement copier le script sur le serveur), la première option ne fonctionnera pas. Vous devrez soit utiliser un programme d'assistance askpass, soit configurer les règles Sudo requises pour utiliser NOPASSWD, s'il s'agit d'une option.

2
Mike Miller

Votre hypothèse selon laquelle -A aidera Sudo à se tromper, malheureusement. Il ne fait que transmettre l'agent ssh. Vous devrez exécuter askpass comme l'avertissement le suggère.

Notez également que bash -c n'est pas nécessaire. Vous pouvez faire simple dans votre script avec ssh server < mylocalscript.sh

1
wernerb