La manière normale de se connecter à un serveur SSH est ssh username@ip_address
. Mais un utilisateur peut seulement vouloir exécuter un programme sur la machine distante. Ainsi, le nom du programme suit l'argument normal qui est ssh username@ip_address <program_name>
. Par exemple ssh username@ip_address ls
,. Cet argument est très bien, sauf pour les programmes interactifs (qui acceptent également l'entrée utilisateur ainsi que la fourniture de sortie), par exemple top
. La sortie est
Variable d'environnement TERM non définie.
ce qui signifie qu'aucun (pseudo-) terminal n'est attaché entre les programmes sshd et top. La solution consiste à ajouter l'argument -t
où la commande entière devient maintenant ssh -t username@ip_address top
.
Ma question est pourquoi sshd par défaut ne peut-il pas également utiliser un pseudo-terminal pour communiquer avec des programmes non interactifs donc il n'est pas nécessaire d'ajouter l' -t
argument pour les programmes interactifs?
RequestTTY yes
(ouforce
) dans votre configuration.top
peut fonctionner en mode batch.Réponses:
Il est vrai que, comme d'autres l'ont dit, les PTY ont une certaine surcharge - mais la grande raison de ne pas utiliser de PTY lors de l'exécution d'une commande à distance est que vous perdez des informations.
Normalement, lorsque vous exécutez une commande à distance via ssh, les commandes
stdout
et lesstderr
flux sont envoyés au localstdout
etstderr
, ce qui signifie que vous pouvez les rediriger / diriger séparément - par exemple:Mais si vous utilisez un PTY, toutes les sorties vont à
stdout
, car les PTY n'ont pas de flux séparés pour la sortie / erreur:la source
-t
devrait être la valeur par défaut et une option requise pour la désactiver, donc vraiment l'avantage de performance mineur est ce qui est le plus logique pour moi dans les cas où cela n'a pas d'importance.La page de manuel pour
ssh
décrit ceci:Elle est caractéristique et probablement causée par des raisons historiques de
rsh
comportement. C'est assez raisonnable. La plupart des commandes ne sont vraiment pas interactives et ce n'est pas une opération gratuite d'allouer PTY (ce qui était plus important il y a 20 ans).la source
rsh
est obscur car ce programme n'a pas d'option correspondante.rsh
, mais il y a certainement une certaine influence, non pas dans les options, mais dans le comportement dersh
etrlogin
(s'il y a commande ou non). Vous ne pouvez pas exécuter une commande interactive (comme rogue (6) ou vi (1)) à l'aide de rsh; utilisez plutôt rlogin (1). .Comment est
ssh
supposé dire si la commande que vous invoquez est interactive ou non?Ce cauchemar est aggravé lorsque vous réalisez que vous pourriez vous connecter à une machine exécutant un système d'exploitation non-unix.
En l'absence de solution facile, un cas devait être celui par défaut.
la source