Normalerweise, wenn Sie einen Befehl an ssh wie folgt übergeben
ssh me@example.com 'some-command.sh'
Sie erhalten eine nicht interaktive Sitzung und ssh wird beendet, sobald der Befehl (oder das Skript oder was auch immer) ausgeführt wird. Wie kann ich eine interaktive Sitzung abrufen und dennoch einen Befehl ausführen, den ich auf meinem lokalen Computer angegeben habe? Zum Beispiel möchte ich in der Lage sein, einen Bildschirm zu öffnen und eine bestimmte Bildschirmsitzung neu zu starten:
ssh me@example.com 'screen -r 12345'
Dies ist jedoch nicht zulässig und gibt den Fehler "Muss mit einem Terminal verbunden sein" zurück. was ich vermute bedeutet im Wesentlichen "muss diesen Befehl von einer interaktiven Shell aufrufen".
Als weiteres Beispiel benutze ich eine Menge Maschinen bei der Arbeit, die oft erfordern, dass ich ein gemeinsames Konto benutze, um Rechte für bestimmte Dinge zu haben (ja, ich weiß: schlechte Idee, aber beschuldige mich nicht, das habe ich nicht eingerichtet Art und Weise), und sie haben in der Regel ksh als Standard-Shell. Ich möchte mich anmelden, zu bash (oder zsh) wechseln und das .bash_profile (oder .zshrc) meines eigenen Kontos beziehen. Dies wäre einfach, wenn ich eine interaktive SSH-Sitzung einrichten und einen Befehl an den Remotecomputer übergeben könnte, der bei der Anmeldung ausgeführt wird.
Ich habe eine sehr kludgey (und ungetestete) Lösung im Sinn, die ich posten werde, aber ich hoffe, dass jemand einen besseren Weg kennt.
UPDATE: Für diejenigen, die das nicht bemerkt haben, plane ich nicht, das alles von Hand zu machen. Wenn ich also auffordere, eine interaktive Sitzung zu eröffnen und dann von Hand zu machen, löst das eigentlich nichts.
2. UPDATE: Um es noch einmal zu klären: Ich versuche (beliebige) Befehle auf dem Server auszuführen (programmgesteuert auf dem Client angegeben), aber dann ist eine interaktive Sitzung geöffnet, die von allen Aktionen dieser programmgesteuerten Befehle betroffen ist.
echo "command" | ssh user@remote_host