Comment traiter avec des “Pseudo-terminal ne sera pas affecté car stdin n'est pas un terminal.”
ssh -t remotehost vim /tmp/x.txt
Je sais que je peux exécuter une commande comme ci-dessus.
Mais je voudrais être en mesure d'exécuter n'importe quel local bash code dans une machine distante. Pour cette raison, je tiens à appeler la distance 'bash -s", de sorte que peut traiter n'importe quel local bash code.
ssh -t remotehost 'bash -s' <<< vim /tmp/x.txt
Cependant, l'exemple ci-dessus montre "Pseudo-terminal ne sera pas affecté car stdin n'est pas un terminal." Est-il possible de laisser ssh prendre bash code via stdin et de l'exécuter via la télécommande 'bash -s"? Merci.
Vous devez vous connecter pour publier un commentaire.
Vous êtes l'obtention de la "Pseudo-terminal ne sera pas attribué..." message, car vous êtes en cours d'exécution ssh avec un seul
-t
option, lors de l'entrée standard du processus ssh n'est pas un TTY. ssh imprime le message spécifiquement dans ce cas. Le documentation -t dit:La
-t
option de ligne de commande est liée à la configuration de ssh option RequestTTY:Un seul
-t
est équivalent à "RequestTTY oui", tandis que deux d'entre eux est l'équivalent de "RequestTTY de la force".Si vous souhaitez que votre commande à distance(s) à exécuter avec un ATS, puis spécifiez
-t
deux fois:ssh va allouer un TTY pour le système à distance et de ne pas imprimer ce message.
Si la commande(s) en cours d'exécution sur le système distant n'avez pas besoin d'un TTY, vous pouvez laisser le
-t
option out:Je crois que ce qui suit peut convenir à vos besoins:
La première expression (
vim ...
) vous permet de spécifier les commandes que vous souhaitez exécuter à distance un fichier appelé/tmp/x.txt
; la seconde expression (ssh ...
) appelle la distance bash interprète, et envoie le contenu de votre fichier local pour l'exécution. Notez que vous n'avez pas besoin de la-t
option pourssh
dans ce cas (qui a donné lieu à la pseudo-terminal d'avertissement), et que vous n'avez pas besoin d'utiliser un ici la chaîne (<<<
), mais vous pouvez utiliser le fichier normal d'entrée de l'opérateur (<
).Cette solution semble fonctionner pour, par exemple, le fichier suivant table des matières:
-t
option à partir de lassh
de commande dans ce cas, qui devrait se débarrasser de la pseudo-terminal d'avertissement. J'ai édité la réponse ci-dessus; la commande en cours semble maintenant fonctionner correctement sur mon système (il exécute le fichier local à distance, sans affichage de l'avertissement).