Wie führe ich nach einer SSH-Verbindung einen Befehl aus, ohne die Verbindung zu trennen?

Wie führe ich nach einer SSH-Verbindung einen Befehl aus, ohne die Verbindung zu trennen?

Ich möchte einen Befehl automatisch ausführen, nachdem ich mich per SSH mit einem anderen Computer verbinde, ohne dass die SSH-Sitzung automatisch geschlossen wird.

Nach einer Suche im Internet habe ich einige Lösungen gefunden, aber keine davon funktioniert so, wie ich es brauche.

ssh bla@bla "ls"

Dadurch wird der lsBefehl auf dem Remotecomputer ausgeführt, die Ausgabe wird angezeigt und die Verbindung wird geschlossen.

Ich habe auch versucht, die SSH-Konfigurationsdatei zu bearbeiten mit

Host bla
        HostName bla
        User bla
        IdentityFile ~/.ssh/key
        RemoteCommand ls
        RequestTTY force 

Gleiches Problem, dies stellt eine Verbindung über SSH her, führt den lsBefehl aus, zeigt mir die Ausgabe und beendet sich dann. Nicht einmal die RequestTTYOption hat geholfen.

ssh bla@bla "ls ; bash"

Dadurch wird die Verbindung nach dem Ausführen nicht getrennt ls, aber ich erhalte keine vollständige Terminalschnittstelle, sondern nur eine einfache Befehlszeile, die das nicht anzeigt me@machine:~$ thing.

Was ich eigentlich will:

Entweder ein Bash-Alias ​​oder .ssh/configein Eintrag, der es mir ermöglicht, einen einfachen Befehl einzugeben, der eine Verbindung zum Remote-Computer herstellt und dann dort einen Befehl ausführt und das Terminal geöffnet lässt. Im Grunde so, als ob ich dies von Hand gemacht hätte:

Typ

ssh blah@blah

und nachdem die Verbindung hergestellt ist, tippe ich

ls

Antwort1

ssh bla@bla "ls ; bash"

Dadurch wird die Verbindung nach dem Ausführen nicht getrennt ls, aber ich erhalte keine vollständige Terminalschnittstelle, sondern nur eine einfache Befehlszeile, die das me@machine:~$Ding nicht anzeigt.

Wenn Sie einen Befehl angeben (z. B. ls ; bashoben), stellt der SSH-Server kein Pseudo-Terminal zur Verfügung. Genau das haben Sie beobachtet.

Andererseits ssh bla@blaweist Sole standardmäßig ein Pseudoterminal zu. Das ist also, was Sie wollen. Erzwingen Sie die Pseudoterminalzuweisung, verwenden Sie -toder RequestTTY.

Nicht einmal die RequestTTYOption hat geholfen.

Es hilft Ihnen nicht weiter, wenn der Remote-Befehl lsnur lautet: „Du brauchst“ ls; bashoder ähnliches.

Es scheint, als hätten Sie ein TTY angefordert, nicht bash. Und als Sie bashdanach angefordert haben ls, haben Sie kein TTY angefordert. Sie benötigen beides:

ssh -t bla@bla "ls; bash"

Beachten Sie, lsdass auch das Pseudoterminal verwendet wird. Bitte lesen Sie den Abschnitt „Überblick“ vondiese Antwort von mirum den Unterschied zu lernen (insbesondere dort, wo es heißt „da ist eine Eigenart“).

Antwort2

Um me@machine loszuwerden, müssen Sie die Umgebungsvariable PS1 festlegen. Versuchen Sie Folgendes:

ssh bla@bla "PS1=\"\"; ls; bash"

verwandte Informationen