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 barmic . É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 Flyounet (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 avectty
).[^] # Re: Pleins de solutions
Posté par Flyounet (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 barmic . É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)
[^] # Re: Pleins de solutions
Posté par Flyounet (site web personnel) . Évalué à 1.
J'utilise la commande
tty
.[^] # Re: Pleins de solutions
Posté par Flyounet (site web personnel) . Évalué à 1.
En changeant le
| while ...
parwhile read se; do blabla; done <<< "${liste}"
ou parwhile read se; do blabla; done < <$(echo -e "${liste}")
, c'est pareil je perd letty
.[^] # LA Solution
Posté par Flyounet (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 Guy . É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.