Quand ssh -t ne serait-il pas approprié au lieu de ssh?

15

L'utilisation ssh -tau lieu de sshpour les connexions aux serveurs distants présente plusieurs avantages. Par exemple, je peux directement éditer un fichier avec vim:, ssh -t host vim foo.txtqui échouerait sinon.

Existe-t-il des circonstances dans lesquelles l'allocation d'un (pseudo) -tty serait une mauvaise chose lors de l'utilisation de ssh?

Alex J
la source

Réponses:

11

Lorsque vous redirigez l'entrée ou la récupérez, ce qui est l'utilisation typique de la "commande hôte ssh". Les caractères de contrôle peuvent être interprétés par la couche TTY (^ S par exemple)

niXar
la source
10

Oui, vous souhaitez parfois établir une connexion silencieuse et en arrière-plan, par exemple lors de la configuration d'un tunnel (par exemple, proxy SOCKS). Dans de tels exemples, vous voulez que le processus N'A PAS de tty.

Voici un exemple de configuration de la redirection de port depuis l'hôte local vers un hôte distant ...

ssh -l username -fNTL 8073:server:873

Une fois cela configuré, vous pouvez ensuite rsync vers localhost, plutôt que vers l'hôte distant, donc efficacement, tunneler votre rsync via ssh...

rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/

Vous feriez ceci si le rsync sortant serverétait bloqué, mais sshne l'était pas.

Xerxès
la source
Merci, c'était vrai aussi, mais j'ai voté pour l'autre car c'était une question plus sérieuse que j'avais négligée.
Alex J
3

En plus de ce qui précède...

(1) Différentes manipulations d'évacuation de tilda:

Le "~". escape vous déconnectera si vous avez un pty (-t). Pour une commande de longue durée, vous souhaiterez peut-être empêcher quelqu'un d'arrêter accidentellement le processus s'il tape ~.

$ ssh hostname.tomontime.com -t sleep 60
[type ~. et il se déconnecte] La
connexion à hostname.tomontime.com est fermée.

$ ssh hostname -T sleep 60
[Je tape ~. et il le traite comme des frappes normales, que la commande sleep ignore.]
~.
~.

Essayez la même chose avec CTRL-C. Vous verrez qu'avec -t vous envoyez le CTRL-C au "sommeil". Avec -T, vous envoyez le CTRL-C au programme ssh exécuté sur votre machine. Il peut y avoir des moments où cela fait une différence (c'est-à-dire que le programme gère INT différemment de HUP)

(2) Vous voulez simplement minimiser l'activité de connexion réseau ou pty.

Lorsque vous essayez de redémarrer une machine qui est hors ptys, vous ne voulez pas encourager le système à essayer d'allouer un pty! Cela minimise également les connexions réseau qui devront être fermées (retardant le redémarrage).

Cela fonctionnera plus rapidement et de manière plus fiable:
ssh -T hostname reboot

Cela peut avoir des problèmes:
ssh -t hostname reboot

TomOnTime
la source
2

ssh -t crée un pseudo terminal sur la machine distante. Ceci est utile si vous enchaînez les commandes ssh sur plusieurs serveurs et que vous voulez un vrai terminal de l'autre côté (vous pouvez donc utiliser 'vi' par exemple).

Vous pourriez ne PAS vouloir '-t' lorsque les scripts de connexion se comportent différemment s'il y a un terminal. C'est une mauvaise pratique à mon humble avis, mais j'ai vu des cas où un script de connexion vérifie le TTY avant 1) de définir l'invite et 2) d'étendre le chemin vers de nombreuses applications interactives.

Dans un autre cas (mentionné par TomOnTime ci-dessus), j'ai en fait rencontré des cas où tous les ATS (ptys) sont épuisés. Évidemment une mauvaise configuration, mais pas besoin de mâcher une ressource pour un tas de tunnels et de rsyncs.

ericslaw
la source