(gelöst) remote ausloggen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
guennid

(gelöst) remote ausloggen

Beitrag von guennid » 02.03.2014 23:32:19

Wenn ich mich via ssh von R1auf R2 einlogge, kann ich das mit dem Kommando exit auf der Kommandozeile beenden und bin zurück auf R1. In einem shell-script des Users auf R2, als der ich eingeloggt bin, funktioniert das scheinbar nicht. Wie kriege ich das hin?

Grüße, Günther
Zuletzt geändert von guennid am 03.03.2014 07:32:56, insgesamt 1-mal geändert.

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

Re: remote ausloggen

Beitrag von Cae » 03.03.2014 00:18:06

Du hast also etwas wie

Code: Alles auswählen

#!/bin/sh

ssh user@r1
echo foo
exit

echo bar
und das exit mitten drin beendet nicht die SSH-Verbindung, sondern das Skript und bar wird nicht ausgegeben? Das ist "richtig" so, denn die SSH-Sitzung liest von stdin und nicht die folgenden Zeilen des Skripts. Will man dies erreichen, ist ein sogenannte here-doc empfehlenswert:

Code: Alles auswählen

#!/bin/sh

ssh user@r1 <<EOF
	echo foo
	exit
EOF

echo bar
(Wobei das exit in beiden Faellen eigentlich ueberfluessig ist, weil die Shell im dem letzten Befehl automatisch beendet wird.)
Gruss 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

guennid

Re: remote ausloggen

Beitrag von guennid » 03.03.2014 07:15:07

Funktioniert! Danke!

Aber verstanden habe ich das nicht. Zweck dieser "heredoc"-Konstruktion ist doch die Ausgabe von Zeichen, wenn ich wikipedia und PHP richtig gelesen habe. Ich dagegen will gar nichts ausgeben, sondern einen Befehl ausführen.

Warum ich stapelverarbeitungsmäßig alles Mögliche in einem shell-script machen lassen kann, zum Beispiel

Code: Alles auswählen

echo 'sag A'
sleep 10
echo 'sag B'
echo 0 > /proc/sys/vm/mmap_min_addr
und das alles brav nacheinander abgearbeitet wird, aber nicht ein "exit" als letztes(!) Kommando, erschließt sich mir (noch) nicht.

Ein wahrhaft herrliches Beispiel für Desinformation liefert mal wieder wikipedia:
Ein Heredoc, auch here document (von englisch, wörtlich hier dokument) genannt, ist ein Sprachkonzept der Informatik zur Spezifikation eines Zeichenfolgenliterals in Kommandozeileninterpretern ...
Der Bezeichnung entsprechend dienen Heredocs zur Definition von Textabschnitten. Im Unterschied zu herkömmlichen Stringdefinitionen werden enthaltene Zeilenumbrüche sowie Einzüge und viele Sonderzeichen im Text bewahrt.
[1] Mal abgesehen davon, das ich das beim besten Willen nicht auf mein Problem zu beziehen vermag: Wer das versteht, hat es sicherlich nicht nötig, das zu lesen. :facepalm:

[1] https://de.wikipedia.org/wiki/Heredoc

Grüße, Günther

Benutzeravatar
bmario
Beiträge: 1256
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: (gelöst) remote ausloggen

Beitrag von bmario » 03.03.2014 10:08:09

Hallo,

ich versuche mal zu erklären, du führst einen Befehl, der normalerweise von der Kommandozeile interaktiv vom Benutzer Input erwartet, aus - in deinem Fall ssh. In einem Script, dass automatisch abläuft, ist das natürlich eher schlecht, da du ja gerade nicht davor sitzen willst und eintippen, was passieren soll ;)

Du musst also erstmal bereitstellen, was geschehen soll. Das was du normalerweise eingeben würde, willst du es Speichern, dann nennt man das String oder Zeichenkette. Und nun willst du noch, dass es ssh übergeben wird. Sicher kennst du folgendes:

Code: Alles auswählen

# befehl < /eine/datei.txt 
Damit wird der Inhalt der /eine/datei.txt als Eingabe an befehl übergeben. Nichts anderes machst du hier auch. Du übergibst deine Zeichenkette , die zufälligerweise wiederum Shell Code enthält, als Eingabe an ssh. Etwas andere Syntax, aber nichts anderes passiert da.

Hoffe das macht es etwas klarer ;)

mario
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

Antworten