¿Cuándo ssh -t no sería apropiado en lugar de ssh?

15

Usar en ssh -tlugar de sshpara conexiones a servidores remotos tiene varias ventajas. Por ejemplo, puedo editar directamente un archivo con vim: ssh -t host vim foo.txtque de lo contrario fallaría.

¿Hay alguna circunstancia en la que asignar un (pseudo) -tty sería algo malo cuando se usa ssh?

Alex J
fuente

Respuestas:

11

Al canalizar la entrada o recuperar la entrada, que es el uso típico del "comando host ssh". Los caracteres de control podrían ser interpretados por la capa TTY (^ S para ej.)

niXar
fuente
10

Sí, a veces desea hacer una conexión silenciosa y en segundo plano, por ejemplo, al configurar un túnel (por ejemplo, proxy SOCKS). En tales ejemplos, desea que el proceso NO tenga un tty.

Aquí hay un ejemplo de cómo configurar el reenvío de puertos desde localhost a algún host remoto ...

ssh -l username -fNTL 8073:server:873

Después de que esto se haya configurado, puede rsync a localhost, en lugar de al host remoto, por lo tanto, de manera efectiva, tunelizando su rsync a través de ssh...

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

Haría esto si la salida de rsync serverestuviera bloqueada, pero sshno lo estaba.

Jerjes
fuente
Gracias, esto también fue correcto, pero voté al otro porque era un tema más serio que pasé por alto.
Alex J
3

Además de lo anterior ...

(1) Diferente manejo de escape tilda:

El "~". escape te desconectará si tienes una pty (-t). Para un comando de larga ejecución, es posible que desee evitar que alguien detenga accidentalmente el proceso si escribe ~.

$ ssh hostname.tomontime.com -t sleep 60
[type ~. y se desconecta] Se ha
cerrado la conexión a hostname.tomontime.com.

$ ssh hostname -T sleep 60
[Escribo ~. y lo trata como pulsaciones de teclas normales, que el comando de suspensión ignora.]
~.
~.

Pruebe lo mismo con CTRL-C. Verá que con -t está enviando el CTRL-C a la "suspensión". Con -T está enviando el CTRL-C al programa ssh que se ejecuta en su máquina. Puede haber ocasiones en que esto haga la diferencia (es decir, el programa maneja INT de manera diferente que HUP)

(2) Solo desea minimizar la actividad de conexión de red o pty.

¡Al intentar reiniciar una máquina que no tiene ptys, no desea alentar al sistema a que intente asignar una pty! Esto también minimiza las conexiones de red que deberán cerrarse (retrasando el reinicio).

Esto funcionará de manera más rápida y confiable:
ssh -T hostname reiniciar

Esto puede tener problemas:
ssh -t hostname reiniciar

TomOnTime
fuente
2

ssh -t crea un pseudo terminal en la máquina remota. Esto es útil si está encadenando comandos ssh a través de múltiples servidores y desea un terminal real en el otro lado (por lo que podría usar 'vi' por ejemplo).

Es posible que NO desee '-t' cuando los scripts de inicio de sesión se comportan de manera diferente si hay un terminal. Esta es una mala práctica en mi humilde opinión, pero he visto casos en los que un script de inicio de sesión busca TTY antes de 1) configurar el indicador y 2) expandir la ruta a muchas aplicaciones interactivas.

En otro caso (mencionado anteriormente por TomOnTime), en realidad me he encontrado con casos en los que todos los TTY (ptys) están agotados. Obviamente, una configuración incorrecta, pero no es necesario masticar un recurso para un montón de túneles y rsyncs.

ericslaw
fuente