[ssh] Command nach connect in remote bash ausführen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
smo
Beiträge: 489
Registriert: 19.12.2005 16:34:40
Lizenz eigener Beiträge: MIT Lizenz

[ssh] Command nach connect in remote bash ausführen

Beitrag von smo » 11.03.2012 13:30:11

Hallo,

ich habe mehrere Debian-Rechner, auf die ich mich regelmäßig connecte um per aptitude Updates einzuspielen (falls nötig). Meine Idee ist, dass ich ein Skript aufrufe, das mir pro Server ein "konsole"-Window aufmacht (ich benutze kde), sich dann per ssh auf den entfernten Server connected und dort ein "aptitude -u" absetzt. Ab diesem Zeitpunkt soll's dann auf der entfernten bash manuell weitergehen (1. root-pw eintippen, 2. Pakete updaten..).

Code: Alles auswählen

#! /bin/bash
set -e

SERVERS=("smo@server1" "smo@server2")
REMOTE_COMMAND='aptitude -u;'

for SERVER in ${SERVERS[@]}; do
        echo 'Connecting to '$SERVER
        # Pseudocode, funktioniert so nicht:
        konsole -e ssh $SERVER $REMOTE_COMMAND
done
Ich schaffe es einfach nicht, dass das "aptitude -u" in der neuen bash-Session nach dem ssh-connect aufgerufen wird. Google liefert mir nur Beispiele wie ich per 'ssh -e' ein Command remote ausführe und dann das Ergebnis an den Aufrufer zurücksende (d.h. die remote session ist sofort wieder beendet).

Ein Workaround wäre auf allen Servern einen "update"-User zu erstellen und in dessen .bashrc ein "aptitude -u" zu hinterlegen. Aber wer will schon Workarounds.. ;)

Wie kann man das mit dem vorhandenen User lösen?

Grüsse
smo

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: [ssh] Command nach connect in remote bash ausführen

Beitrag von Cae » 11.03.2012 13:43:12

Was spricht dagegen, an den bisherigen Befehl noch && /bin/bash dranzuhängen? Dann macht aptitude, was es halt macht, und danach wird die interaktive Bash gestartet, die eben nicht wieder zusammenklappt. Natürlich will das richtig escaped sein, damit keine lokale Bash gestartet wird.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

smo
Beiträge: 489
Registriert: 19.12.2005 16:34:40
Lizenz eigener Beiträge: MIT Lizenz

Re: [ssh] Command nach connect in remote bash ausführen

Beitrag von smo » 11.03.2012 15:25:49

Cae hat geschrieben:Was spricht dagegen, an den bisherigen Befehl noch && /bin/bash dranzuhängen? Dann macht aptitude, was es halt macht, und danach wird die interaktive Bash gestartet, die eben nicht wieder zusammenklappt. Natürlich will das richtig escaped sein, damit keine lokale Bash gestartet wird.

Gruß Cae
Sorry, habe mich missverständlich ausgedrückt. "Danach" ist zu spät, weil der aptitude-Aufruf schon die interaktive shell benötigt um das root-Passwort abzufragen. Und einloggen per ssh mit root ist keine Option.

Grüsse
smo

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: [ssh] Command nach connect in remote bash ausführen

Beitrag von Cae » 11.03.2012 15:53:02

Dann mach' es halt andersrum, sag konsole, es soll ssh aufrufen, welches remote die Bash ausführt, der du sagst, dass sie das Update fahren soll. Etwa so:

Code: Alles auswählen

$ konsole -c "ssh foo@bar -c 'bash -c apt-get update'"
Ungetestet, insbesondere könnte -c auch anders heißen.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
CrashMan
Beiträge: 340
Registriert: 07.04.2007 14:04:27
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: MD

Re: [ssh] Command nach connect in remote bash ausführen

Beitrag von CrashMan » 11.03.2012 22:09:12

Versuch mal

Code: Alles auswählen

ssh -t $SERVER $REMOTE_COMMAND
debian stable + arch

smo
Beiträge: 489
Registriert: 19.12.2005 16:34:40
Lizenz eigener Beiträge: MIT Lizenz

Re: [ssh] Command nach connect in remote bash ausführen

Beitrag von smo » 11.03.2012 22:28:36

Super! Danke euch beiden, so klappt's:

Code: Alles auswählen

#! /bin/bash
set -e

SERVERS=("smo@server1" "smo@server2")
REMOTE_COMMAND="/bin/bash -c 'aptitude -u'"

for SERVER in ${SERVERS[@]}; do
        echo 'Connecting to '$SERVER
        konsole -e ssh -t $SERVER $REMOTE_COMMAND
done

Antworten