Antworten:
Wenn Sie einen Befehl mit ssh auf dem Remotecomputer ausführen, wird der Remotesitzung standardmäßig kein TTY zugewiesen. Auf diese Weise können Sie Binärdaten usw. übertragen, ohne sich mit TTY-Macken befassen zu müssen. Dies ist die Umgebung, in der der Befehl ausgeführt wird computerone
.
Wenn Sie jedoch ssh ohne einen Remote-Befehl ausführen, weist es TTY zu, da Sie wahrscheinlich eine Shell-Sitzung ausführen. Dies wird vom ssh otheruser@computertwo.com
Befehl erwartet , aber aufgrund der vorherigen Erklärung ist für diesen Befehl kein TTY verfügbar.
Wenn Sie eine Shell aktivieren möchten computertwo
, verwenden Sie stattdessen diese Option, die die TTY-Zuweisung während der Remote-Ausführung erzwingt:
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
Dies ist normalerweise sinnvoll, wenn Sie am Ende der SSH-Kette eine Shell oder einen anderen interaktiven Prozess ausführen. Wenn Sie Daten übertragen -t
möchten , ist das Hinzufügen weder angebracht noch erforderlich , aber dann würde jeder ssh-Befehl einen datenerzeugenden oder -verbrauchenden Befehl enthalten, wie zum Beispiel:
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
Es gibt eine bessere Möglichkeit, SSH als Relais zu verwenden: Verwenden Sie die ProxyCommand
Option. Auf dem Client-Computer muss ein Schlüssel vorhanden sein, mit dem Sie sich beim zweiten Computer anmelden können (unter den meisten Umständen ist der öffentliche Schlüssel die empfohlene Methode zur Verwendung von SSH). Legen Sie dies in Ihre ~/.ssh/config
und rennen ssh computertwo
.
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
nc
ist netcat . Jede der verschiedenen verfügbaren Versionen ist geeignet.
Sie können die Option PROXY Jump in ssh verwenden
-J [user@]host[:port]
Connect to the target host by first making a ssh connection to the jump host and then establishing a TCP forwarding to the ultimate destination from there. Multiple jump hops may be specified
separated by comma characters. This is a shortcut to specify a ProxyJump configuration directive.
Wenn ich also eine Verbindung zu hostB herstellen muss, aber erst hostA durchlaufen muss, um dorthin zu gelangen. Normalerweise würde ich
ssh hostA
[user@hostA ~]$ ssh hostB
Ich mache das jetzt
ssh -J hostA hostB
[user@hostB ~]$
Sie können eine SSH-Konfigurationsoption "RequestTTY" über die Befehlszeile überschreiben.
Mein Arbeitsbeispiel cd-serv-one.sh
startet /bin/bash
in der SSH-Sitzung, nachdem mehrere Befehle ausgeführt wurden:
#!/bin/bash
ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"
Und jetzt renne ich einfach los, ./cd-serv-one.sh
um eine benötigte SSH-Sitzung zu starten.
ssh
!