Forum Programmation.shell [Résolu] Appel de SSH depuis un Shell script (Bash)

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
1
13
juin
2014

Bonjour,

En voulant appeler SSH depuis un script Shell (Bash), j'ai les erreurs suivantes : Pseudo-terminal will not be allocated because stdin is not a terminal. et stdin: is not a tty

Ma ligne de commande pour appeler le SSH est la suivante :
DISPLAY=y SSH_ASKPASS=filename setsid ssh -t -X -o 'PreferredAuthentications password,keyboard-interactive' -o 'StrictHostKeyChecking no' ${1:-}

En googlant un peu, j'ai essayé la méthode indiquant d'ajouter un -t et donc avec la ligne de commande suivante, j'ai une autre erreur : tcgetattr: Invalid argument
DISPLAY=y SSH_ASKPASS=filename setsid ssh -t -t -X -o 'PreferredAuthentications password,keyboard-interactive' -o 'StrictHostKeyChecking no' ${1:-}

J'ai aussi tenté les choses suivantes dans le .bashrc :
tty -s && mesg n
[[ -z "${PS1}" ]] && return

Mais ces erreurs sont toujours là. Si vous avez des idées je suis preneur pour tout tester. Merci.

N.B. Pour ceux qui se posent la question du pourquoi un script qui SSH ? Tout simplement car trop de machines à gérer, donc avec des select (mais j'aurais pu utiliser dialog ou whiptail) ça fait des petits menus pour nous aider à sélectionner la bonne machine et ça lance la session SSH.

  • # Pleins de solutions

    Posté par  . Évalué à 5.

    Je ne connais pas l'option -t de ssh, mais il est possible de simuler un tty avec PDIP.
    Il est aussi possible d'utiliser expect pour ça.

    Ensuite il y a en moins bidouille. Par exemple tu peut voir pour faire ça avec fabric.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

    • [^] # Re: Pleins de solutions

      Posté par  (site web personnel) . Évalué à 1.

      Merci, j'ai regardé hier la solution du GNU/linuxMag, mais ça ne m'a pas solutionné le problème…

      Par contre, en faisant un test, lorsque mon Shell s'exécute : un tty me renvoie 'not a tty', alors qu'au début de l'exécution du script celui-ci est bien setté.

      Quelqu'un a une idée de ce qui peut vidé la valeur de tty ?

      N.B. : L'utilisation de la variable SSH_TTY ne règle pas le problème (en récupérant au début du script la valeur avec tty).

      • [^] # Re: Pleins de solutions

        Posté par  (site web personnel) . Évalué à 1.

        Je pense avoir trouvé le coupable (c'est moi), lorsque l'on passe dans l'instruction blabla suivante le tty dégage :
        echo -e "${__se}" |while read lil; do blabla; done

        Bon, si quelqu'un pouvait m'expliquer pourquoi le | while ... ; do ... ; done me fait cela, je serais ravi. Merci.

        • [^] # Re: Pleins de solutions

          Posté par  . Évalué à 4.

          Parce que tu as un pipe est donc un nouveau shell, la variable est elle exportée ?

          Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

    • [^] # LA Solution

      Posté par  (site web personnel) . Évalué à 2.

      Michel, merci pour ton aide.

      Le problème était bien la perte du TTY (mise en évidence avec la commande tty, justement).

      Cette perte était due au passage dans un sous-shell en effectuant :
      echo "liste" | while read item; do blabla; done

      J'ai solutionné en faisant à la place :
      for item in $(echo "liste"); do blabla; done

      Et là mon TTY est toujours là.

  • # ssh mange le stdin ...

    Posté par  . Évalué à 1.

    Les ssh lancés dans un script mangent les entrées stdin:
    Du coup il faut faire soit "ssh -n …", soit "ssh … </dev/null"
    Je sais pas trop si ça répond à la question, mais ça reste
    un truc à savoir.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.