Wann wäre ssh -t nicht angemessen anstelle von ssh?

15

Die Verwendung von ssh -tanstelle von sshfür Verbindungen zu Remoteservern bietet mehrere Vorteile. Zum Beispiel kann ich eine Datei direkt mit vim: bearbeiten ssh -t host vim foo.txt, was sonst fehlschlagen würde.

Gibt es irgendwelche Umstände, unter denen die Zuweisung einer (Pseudo) -Tty bei Verwendung von ssh eine schlechte Sache wäre?

Alex J
quelle

Antworten:

11

Bei der Weiterleitung der Eingabe oder beim Zurückholen der Eingabe, was die typische Verwendung des Befehls "ssh host" ist. Steuerzeichen können von der TTY-Ebene interpretiert werden (zB ^ S)

niXar
quelle
10

Ja, manchmal möchten Sie eine stille Verbindung im Hintergrund herstellen, z. B. beim Einrichten eines Tunnels (z. B. SOCKS-Proxy). In solchen Beispielen soll der Prozess KEIN tty haben.

Hier ist ein Beispiel für das Einrichten der Portweiterleitung von localhost zu einem Remote-Host ...

ssh -l username -fNTL 8073:server:873

Nachdem dies eingerichtet wurde, können Sie Rsync an localhost statt an den Remote-Host senden und somit effektiv Ihren Rsync über ssh...

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

Sie würden dies sagen, wenn Rsync, zu dem Sie ausgehen, serverblockiert ist, aber sshnicht.

Xerxes
quelle
Danke, das war auch richtig, aber ich habe das andere gewählt, da es ein ernsteres Problem war, das ich übersehen habe.
Alex J
3

Zusätzlich zum oben genannten...

(1) Unterschiedliche Tilda Fluchtbehandlung:

Das "~." Escape trennt Sie, wenn Sie ein Pty (-t) haben. Bei einem Befehl mit langer Laufzeit möchten Sie möglicherweise verhindern, dass jemand den Prozess versehentlich anhält, wenn er ~ eingibt.

$ ssh hostname.tomontime.com -t sleep 60
[Typ ~. und es trennt]
Verbindung zu hostname.tomontime.com geschlossen.

$ ssh hostname -T sleep 60
[Ich gebe ~ ein. und es behandelt es wie normale Tastenanschläge, die der Befehl sleep ignoriert.]
~.
~.

Versuchen Sie dasselbe mit STRG-C. Sie werden sehen, dass Sie mit -t die STRG-C-Taste in den "Ruhezustand" versetzen. Mit -T senden Sie die Tastenkombination STRG-C an das auf Ihrem Rechner ausgeführte ssh-Programm. Es kann vorkommen, dass dies einen Unterschied macht (dh das Programm behandelt INT anders als HUP).

(2) Sie möchten nur die Pty- oder Netzwerkverbindungsaktivität minimieren.

Wenn Sie versuchen, einen Computer neu zu starten, auf dem kein ptys mehr vorhanden ist, möchten Sie das System nicht dazu auffordern, eine Pty zuzuweisen! Dies minimiert auch die Netzwerkverbindungen, die geschlossen werden müssen (Verzögerung des Neustarts).

Dies funktioniert schneller und zuverlässiger:
Neustart von ssh-Hostname

Dies kann zu Problemen führen:
ssh -t Hostname Neustart

TomOnTime
quelle
2

ssh -t erstellt ein Pseudoterminal auf dem Remote-Computer. Dies ist nützlich, wenn Sie ssh-Befehle über mehrere Server verketten und ein echtes Terminal auf der Gegenseite haben möchten (Sie könnten also beispielsweise 'vi' verwenden).

Möglicherweise möchten Sie NICHT '-t', wenn sich Anmeldeskripte anders verhalten, wenn es ein Terminal gibt. Dies ist meiner Meinung nach eine schlechte Praxis, aber ich habe Fälle gesehen, in denen ein Anmeldeskript nach TTY sucht, bevor 1) die Eingabeaufforderung festgelegt und 2) der Pfad zu vielen interaktiven Anwendungen erweitert wurde.

In einem anderen Fall (von TomOnTime oben erwähnt) bin ich tatsächlich auf Fälle gestoßen, in denen alle TTY (ptys) aufgebraucht sind. Offensichtlich eine Fehlkonfiguration, aber keine Notwendigkeit, eine Ressource für eine Reihe von Tunneln und Rsyncs zu zerkauen.

ericslaw
quelle