Script SSH Interactive Console, für das Zeichen mit Escapezeichen benötigt werden

532
Luke Exton

Ich möchte meine bestehende SSH-Verbindung über ein Shell-Skript ändern. Wenn ich also ein vorhandenes Skript aus der Ferne ausführen möchte, möchte ich, dass ein neuer Port geöffnet wird, um getunnelt zu werden.

Interaktiv kann ich das über:

ubuntu@6c1a17c3864c:~$ ~C ssh> -R 9000:localhost:9000 

Viel klarer als ich könnte: https://unix.stackexchange.com/questions/33557/using-an-already-established-ssh-channel .

Im Idealfall möchte ich ein Shell-Skript verwenden, um über die Escape-Zeichen zu interagieren, um die vorhandene Verbindung anzupassen.

Ich habe mir etwas angesehen wie:

#!/bin/bash  # Attempt 1 echo -n '\r\f \~\~C -L 9000:localhost:9000' # Attempt 2 echo -e '\r\f\~\C -R 9000:localhost:9000' printf '\~\C -L 9000:localhost:9000' netstat -taln 

Sowie einige andere Kombinationen.

Ich habe bestätigt, dass sowohl Echo als auch Printf Shell-Builds sind.

Ich verwende Bash 4.3.11 x86_64-pc-linux-gnu.

3
Um dies zu erreichen, müssten Sie wahrscheinlich ein Skript erwarten. Aber warum? Sie können die Portweiterleitung in der Befehlszeile wesentlich einfacher definieren. Jakuje vor 8 Jahren 0
Ich hatte gehofft, eine Reihe von Bash-Funktionen definieren zu können, die die vorhandene SSH-Sitzung ändern können. Ich bin nicht gut in diesem wirklich niedrigen Niveau. Aber es gibt keinen Grund, warum es nicht in bash gemacht werden konnte. Erwarten könnte gut funktionieren. Ich werde sehen, was ich dort tun kann, damit es gut spielt. Luke Exton vor 8 Jahren 0
Das Problem ist, dass diese Escape-Zeichen NICHT von bash ausgewertet werden, sondern lokal von Ihrem ssh-Client. Jakuje vor 8 Jahren 0
Die Fluchtzeichen, die ich senden möchte, müssten also vom ssh-Client auf meinem lokalen Rechner ausgewertet werden, oder? Anstatt auf das entfernte Ende zu schlagen. Sogar das Versenden per Tcl / Expect würde es nicht auf der Clientseite auswerten. Luke Exton vor 8 Jahren 0
Erwarten sollte das, aber ich habe es noch nicht versucht. [Es gibt einige Referenzen] (http://www.linuxquestions.org/questions/programming-9/expect-scripting-help-escape-characters-663046/). Jakuje vor 8 Jahren 0

1 Antwort auf die Frage

0
Jakuje

Sie benötigen ein expectSkript, um dies zu erreichen. Das Problem ist, dass diese Escape-Zeichen NICHT von bash ausgewertet werden, sondern lokal von Ihrem ssh-Client. Beispiel, das die Arbeit erledigen sollte:

#!/usr/bin/expect -f set timeout 10 exp_internal 1 spawn telnet $argv expect "login:" send "mylogin\n" expect "Password:" send "mypass\n" expect '~$' # Send some commands close 

Quelle