2009-10-27 11 views
14

Ich möchte einen Befehl, der ssh'es in eine Maschine, führt einen Befehl (CD oder Ausführen eines Skripts oder su), und gibt mir dann die Shell. Das Übergeben eines Befehls an ssh scheint immer beendet zu sein.ssh mit Befehl .... Plus die Shell

Einige Beispiele von dem, was ich suche: 'ssh me @ machine1 "./executeMyScript & & cd/developmentDirectory"' und dann wieder meine Schale gibt es mir.

Die Gründe, warum ich dies tun möchte, ist, weil ich mrxvt (tabbed x terms) verwende, die es mir ermöglicht, Befehle für alle meine Registerkarten beim Start auszuführen. Ich hätte gerne ein paar SSH-Verbindungen zur gleichen Maschine, aber sie haben verschiedene Dinge nach dem Sshing.

-Rob

Vielen Dank!

Antwort

10

Variation auf den anderen Antworten wirklich, verwenden Sie die Option -t von ssh Zuweisung pseudo-tty zu erzwingen:

ssh -t [email protected] ./executeMyScript '&&' bash -i 
+0

danke! Bei erster Inspektion funktioniert das genau so, wie ich es möchte! Hurra für "-t"! – robarson

+0

Obwohl diese Frage angemessen beantwortet wurde, wenn jemand liest, weißt du, wie ich die Instanz von bash haben kann, die ich mit diesem Befehl öffne emacs (so dass, wenn ich Emacs schließe, es zurück zu meinem Bash-Terminal gelangt) ? Hoppla ... sogar etwas, das Emacs öffnet, ohne dass Bash gut wäre (so dass der Emacs nicht sofort nach dem Start beendet wird). – robarson

4

Wie wäre es

ssh [email protected] ./executeMyScript '&&' bash -i 

Sie müssen die && zitieren, so wird sie von der lokalen Shell statt geschluckt zu dem Remote-Rechner weitergegeben werden.

Zitat ein ';' Charakter und Sie können Ihre Startverzeichnis, ändern:

ssh [email protected] ./executeMyScript '&&' cd /developmentDirectory ';' bash -i 
+0

Danke. Der Aufruf zu bash hat funktioniert ...Infosar, wie es mir eine Muschel gab. Leider funktioniert es nicht sehr gut .. einfache Tastaturkürzel wie Strg^a funktionieren nicht, was bedeutet, dass ich versuchen muss, eine andere Lösung zu finden. Übrigens, es druckt auch "bash: keine Jobkontrolle in dieser Shell". – robarson

+3

Versuchen Sie es mit der '-t' Option:' ssh -t me @ machine ... ' – mob

2

Setzen Sie so etwas wie dies am Ende des Skripts Sie ausführen möchten:

bash -li 

Das beginnt Bash als interaktive Login-Shell. Es ist nicht perfekt, da Sie Dinge wie Weiterleitung verpassen werden, aber es könnte Ihren Bedürfnissen entsprechen.

Wenn es nicht ausreichend ist, würde ich nur machen zwei separate ssh Anrufe, ein um das Skript auszuführen und ein anderer mich einzuloggen.

+0

+1 für zwei separate SSH-Befehle. KUSS –

2

Wie über die SendEnv Option in ssh_config mit einer bestimmten Umgebung senden Option von Ihrem lokalen Rechner zu Ihrem entfernten Rechner und anschließend nach dieser Umgebungsvariable in der Konfiguration des entfernten Hosts suchen?

In Ihrem .ssh/special-config-Datei:

remotehost: 
    SendEnv * 

Ihr lokales Skript:

RUN_THIS_FIRST_COMMAND=blah 
ssh -F special-config-file 

Die Fernbedienung Bash_profile:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then 
    $RUN_THIS_FIRST_COMMAND 
fi 

Sie müssen möglicherweise überprüfen Einige dieser Zeilen habe ich einfach von den Manpages weggeworfen und habe das noch nie ausprobiert. Persönlich mag ich es nicht, meine lokale und Remote-Umgebung für diese Lösung zu ändern.

0

Dies funktioniert für mich.

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i" 
+2

Warum hat es für Sie funktioniert? Gib ein bisschen mehr Details, damit das OP verstehen kann, warum du geschrieben hast, was du getan hast. – rayryeng

+1

Es ist auch eine mehr oder weniger direkte Kopie der bestehenden gewählten Antwort, vor 4 Jahren geschrieben ... – Synchro

+0

Eine Erklärung wäre nett. –