Ein einziger Befehl, um sich bei SSH anzumelden und das Programm auszuführen?

58

Gibt es eine Möglichkeit, einen einzelnen Befehl zu strukturieren, um sich über SSH bei einem Remoteserver anzumelden und ein Programm auf der Remoteanmeldeshell auszuführen?

Im OpenSSH-Handbuch heißt es: "Wenn ein Befehl angegeben ist, wird er auf dem Remote-Host anstelle einer Anmeldeshell ausgeführt." Melden Sie sich beispielsweise ssh user@server mailbeim Remote-Server an, zeigen Sie den Postfachstatus an und kehren Sie dann zur lokalen Shell zurück. Gibt es eine Möglichkeit, nach der Anzeige des E-Mail-Status auf der Remote-Shell zu bleiben?

Außerdem ssh user@server [command]scheint es nicht zu funktionieren, wenn der Befehl ein Programm ist, zum Beispiel vim oder mutt. Gibt es eine Möglichkeit, sich bei der Remote-Shell anzumelden und ein Programm auszuführen, während Sie sich in der Remote-Shell während des Programms und nach dem Beenden des Programms befinden und nur bei einem bestimmten logoutBefehl endgültig beenden (genau wie in einer normalen SSH-Sitzung)?

Ich möchte irgendwann in der Lage sein, einen solchen Befehl als Alias ​​in die lokale .bashrc zu schreiben, damit er auf Wunsch schnell ausgeführt werden kann. Ein Beispiel wäre, sich über SSH bei einem Remote-Server anzumelden und mutt auf dem Remote-Server zu öffnen, um E-Mails zu lesen oder zu senden.

user981178
quelle
Was bedeutet es, nach der Anzeige des E-Mail-Status auf der Remote-Shell zu bleiben? Wäre das nicht gleichwertig sein , eine ssh zu tun , nachdem die E - Mail - Befehl ausgeführt wird : ssh remote@server mail ; ssh remote@server? Auch jeder remote ausgeführte Befehl, der ein Terminal benötigt, überlebt / funktioniert nicht über ssh oder?
mkc
Nun, das scheint zu funktionieren, um den Befehl auszuführen und dann die Remote-Shell abzurufen, aber es funktioniert, indem eine SSH-Verbindung geöffnet und der Befehl ausgeführt und die SSH-Verbindung geschlossen und dann eine andere SSH-Verbindung geöffnet wird. Gibt es eine Möglichkeit, dies alles mit einer einzigen ersten Verbindung zu tun? Dies ermöglicht es dem Befehl auch immer noch nicht, ein Programm auszuführen.
user981178

Antworten:

90

Haben Sie es versucht ssh -t user@server "mail && bash"(oder durch eine bashandere Shell ersetzt)?

Das -tist notwendig, um einen Pseudo-tty zu schaffen für bash als interaktive Schale zu verwenden.

jsbillings
quelle
1
Ich gebe allerdings zu, dass ich es wahrscheinlich vorziehen würde, nur muttin einem tmuxoder zu rennen screen, und dann kann ich nach Belieben weitere Muscheln anbringen und wieder anbringen. Außerdem kann ich so viele zusätzliche Muscheln rennen, wie ich wollte.
Jsbillings
1
Nun, ich finde verschiedene Verhaltensweisen mit diesem Befehl. Verwendet wie oben (in der Antwort), zeigt es immer noch nur den Postfachstatus an und meldet sich dann ab, zeigt aber jetzt auch an, dass die Verbindung geschlossen ist. Wird wie oben beschrieben verwendet, jedoch zum Beispiel mit Nano anstelle von Mail, wird eine Nano-Sitzung geöffnet, und beim Beenden wird zur Remote-Bash-Shell zurückgekehrt, die dann exitstatt mit beendet werden muss logout. Ich kann es noch nicht mit mutt (oder ähnlichem) testen.
user981178
Bringt die -tOption Sicherheitsbedenken mit sich? Ich habe das noch nie benutzt.
user981178
Soweit ich weiß, bringt -t keine Sicherheitsbedenken mit sich. Haben Sie versucht, die &&durch eine zu ersetzen ;?
frühestens am
Bei jedem Befehl, der mit einem Beendigungsstatus ungleich Null beendet wird, wird der zweite Befehl aufgrund der Shell-Logik nicht ausgeführt.
Jsbillings