/ / Ssh Befehl ausführen und Verbindung halten - ssh

Ssh-Befehl ausführen und Verbindung beibehalten - ssh

Gibt es eine Möglichkeit, einen Befehl auszuführen, bevor auf ein entferntes Terminal zugegriffen wird

Wenn ich diesen Befehl eingebe:

bash $> ssh user@server.com "ls"

Der Befehl ls wird auf dem Remote-Computer ausgeführt, ssh wird jedoch beendet und ich kann meine Remote-Sitzung nicht fortsetzen.

Gibt es eine Möglichkeit, die Verbindung aufrechtzuerhalten? Der Grund, warum ich das frage, ist, dass ich ein Setup für die SSH-Sitzung erstellen möchte, ohne die entfernte .bashrc-Datei ändern zu müssen.

Antworten:

1 für die Antwort № 1

Sie können versuchen, Process Subsitution für die init-Datei von bash zu verwenden. Im folgenden Beispiel definiere ich eine Funktion myfunc:

myfunc () {
echo "Running myfunc"
}

die ich in einen ordentlich entflohenen Einzeiler verwandle, der im <(...) konstruieren für Prozessunterteilungen für die --init-file Argument von bash:

$ ssh -t localhost "bash --init-file <( echo "myfunc() { echo "Running myfunc" ; }" )  "
Password:
bash-3.2$ myfunc
Running myfunc
bash-3.2$ exit

Beachten Sie, dass einmal verbunden, mein .bashrc wird aber nicht beschafft myfunc ist in einer interaktiven Sitzung definiert und ordnungsgemäß verwendbar.

Für komplexere Bash-Funktionen kann es etwas schwierig werden, aber es funktioniert.


2 für die Antwort № 2

Ich würde die Zuteilung eines Pseudo tty erzwingen und dann bash nach dem laufen lassen ls Befehl:

syzdek@host1$ ssh -t host2.example.com "ls -l /dev/null;   bash"
-rwxrwxrwx    1 root     other          27 Apr  1  2005 /dev/null
bash-4.1$