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 № 1Sie 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$