
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 ls
Befehl 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 ls
Befehl aus, zeigt mir die Ausgabe und beendet sich dann. Nicht einmal die RequestTTY
Option 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/config
ein 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 dasme@machine:~$
Ding nicht anzeigt.
Wenn Sie einen Befehl angeben (z. B. ls ; bash
oben), stellt der SSH-Server kein Pseudo-Terminal zur Verfügung. Genau das haben Sie beobachtet.
Andererseits ssh bla@bla
weist Sole standardmäßig ein Pseudoterminal zu. Das ist also, was Sie wollen. Erzwingen Sie die Pseudoterminalzuweisung, verwenden Sie -t
oder RequestTTY
.
Nicht einmal die
RequestTTY
Option hat geholfen.
Es hilft Ihnen nicht weiter, wenn der Remote-Befehl ls
nur lautet: „Du brauchst“ ls; bash
oder ähnliches.
Es scheint, als hätten Sie ein TTY angefordert, nicht bash
. Und als Sie bash
danach angefordert haben ls
, haben Sie kein TTY angefordert. Sie benötigen beides:
ssh -t bla@bla "ls; bash"
Beachten Sie, ls
dass 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"