Quando ssh -t non sarebbe appropriato al posto di ssh?


15

L'utilizzo ssh -tanziché sshper le connessioni ai server remoti presenta numerosi vantaggi. Ad esempio, posso modificare direttamente un file con vim:, ssh -t host vim foo.txtche altrimenti fallirebbe.

Ci sono circostanze in cui l'allocazione di un (pseudo) -tty sarebbe una cosa negativa quando si usa ssh?

Risposte:


11

Quando si reindirizza l'input o si ottiene l'input, che è l'uso tipico di "comando host ssh". I caratteri di controllo possono essere interpretati dal livello TTY (^ S per es.)


10

Sì, a volte si desidera stabilire una connessione silenziosa e in background, ad esempio durante l'impostazione di un tunnel (ad es. Proxy SOCKS). In tali esempi, si desidera che il processo NON abbia un tty.

Ecco un esempio di configurazione del port forwarding da localhost ad un host remoto ...

ssh -l username -fNTL 8073:server:873

Dopo che questo è stato impostato, puoi quindi rsync su localhost, anziché sull'host remoto, quindi efficacemente, tunneling di rsync tramite ssh...

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

Faresti questo per dire se rsync che esce serverera bloccato, ma sshnon lo era.


Grazie, anche questo era giusto, ma ho votato l'altro perché è stato un problema più serio che ho trascurato.
Alex J,

3

Oltre a quanto sopra ...

(1) Diversa gestione della fuga di tilda:

Il "~". escape ti disconnetterà se hai un pty (-t). Per un comando di lunga durata, potresti voler impedire a qualcuno di interrompere accidentalmente il processo se digitano ~.

$ ssh hostname.tomontime.com -t sleep 60
[type ~. e si disconnette]
Connessione a hostname.tomontime.com chiusa.

$ ssh nomehost -T sleep 60
[scrivo ~. e lo tratta come normali sequenze di tasti, che il comando sleep ignora.]
~.
~.

Prova la stessa cosa con CTRL-C. Vedrai che con -t stai inviando CTRL-C in "sleep". Con -T stai inviando CTRL-C al programma ssh in esecuzione sul tuo computer. Ci possono essere momenti in cui questo fa la differenza (ovvero il programma gestisce INT in modo diverso da HUP)

(2) Volete solo minimizzare l'attività di connessione pty o di rete.

Quando si tenta di riavviare una macchina che ha esaurito i pty, non si desidera incoraggiare il sistema a provare ad allocare un pty! Ciò minimizza anche le connessioni di rete che dovranno essere chiuse (ritardando il riavvio).

Funzionerà più velocemente e in modo più affidabile:
ssh -T riavvio del nome host

Ciò può avere problemi:
ssh -t riavvio del nome host


2

ssh -t crea uno pseudo terminale sul computer remoto. Ciò è utile se si stanno concatenando comandi ssh su più server e si desidera un terminale reale sul lato opposto (quindi è possibile utilizzare 'vi' per esempio).

Potresti NON voler '-t' quando gli script di login si comportano diversamente se c'è un terminale. Questa è una cattiva pratica IMHO, ma ho visto casi in cui uno script di accesso controlla TTY prima di 1) impostare il prompt e 2) espandere il percorso a molte applicazioni interattive.

In un altro caso (menzionato da TomOnTime sopra), in realtà mi sono imbattuto in casi in cui tutti i TTY (pty) sono esauriti. Ovviamente una configurazione errata, ma non è necessario masticare una risorsa per un mucchio di tunnel e rsync.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.