ubuntuusers.de

Per Shell-Skript eine SSH Verbindung aufbauen

Status: Gelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

VladTepees

Anmeldungsdatum:
8. Oktober 2012

Beiträge: 29

Hallo Leute,

ich möchte ein kleines Skript schreiben welches sich auf den Server einloggt und dort wenige (2-3) Befehle ausführt.

Weiß aber nicht wie ich per Skript eine SSH Verbindung aufbauen soll, da es bei der PW eingabe hackt.

Habe schon was gelesen, dass es mit except gehen soll... Hier ein Skript aus dem Netz

1
2
3
4
5
6
#!/usr/bin/expect -f
spawn ssh user@hostname
expect "Password:"
sleep 1
send "<meinPasswort>\r"
mkdir TEST_FOLDER

Habe user, server eingestellt. "meinPasswort" habe ich ersetzt, die eckigen Klammern und das \r habe ich so stehen gelassen.

Aber es passiert nichts ☹. Es erscheint

1
2
3
4
Password: invalid command name "mkdir"
    while executing
"mkdir TEST_FOLDER"
    (file "./skript22.sh" line 6)

Habt ihr eine Idee ? ❓

Viele Grüße Vlad

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

VladTepees schrieb:

Weiß aber nicht wie ich per Skript eine SSH Verbindung aufbauen soll, da es bei der PW eingabe hackt.

Ich nehme an Dein Skript hakt (verhakt sich), und hackt nicht (like a hacker).

Habe schon was gelesen, dass es mit except gehen soll... Hier ein Skript aus dem Netz

1
2
3
4
5
6
#!/usr/bin/expect -f
spawn ssh user@hostname
expect "Password:"
sleep 1
send "<meinPasswort>\r"
mkdir TEST_FOLDER

Habe user, server eingestellt. "meinPasswort" habe ich ersetzt, die eckigen Klammern und das \r habe ich so stehen gelassen.

Die Klammern sind spitz, eckig sind diese hier:

1
2
[eckig]
<spitz>(rund){geschweift}

Erwartet denn Dein Server spitze Klammern? Ich denke nein. Es gibt so eine Angewohnheit manisch ad-hoc-Syntax zu entwerfen, die nirgends erklärt wird und auch kein Standard ist.

Das gilt es wegzulassen, außer Du gibst auch manuell immer spitze Klammern ein.

VladTepees

(Themenstarter)

Anmeldungsdatum:
8. Oktober 2012

Beiträge: 29

Erstmal danke für die schnelle Antwort! Vielleicht sollte ich dazusagen, dass ich keine Ahnung von Skripten habe. Kenne gerade mal die einfachen Terminal Befehle 😐

Das Skript sieht nun so aus

1
2
3
4
5
6
7
8
#!/usr/bin/expect -f

spawn ssh user@server
expect "Password:"
sleep 1
send "meinPasswort\r"

mkdir TEST_FOLDER

Da kommt immernoch ein Fehler

1
2
3
4
Password: invalid command name "mkdir"
    while executing
"mkdir TEST_FOLDER"
    (file "./skript22.sh" line 8)

Will auf dem Server einen Ordner anlegen um zu testen ob es funktioneirt hat. Aber das geht nicht ❓

Aber in meinem Skript sollten die einfahchen Befehle wie cd, ls, mkdir, rmdir ..... schon funktionieren oder ?

Will auf dem Server ein programm starten. Melde mich manuell auf dem Server an und tippe

1
matlab

ein. Dass sollte in dem Skript auch funktionieren oder ?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Ich achte jetzt erst auf die Überschrift, hatte zuvor nur expect im Sinne.

Meine Erfahrungen mit expect sind begrenzt - ich hatte nur einmal ein Skript im Einsatz, welches ich aber nicht selbst geschrieben hatte, etwas mit Modemeinwahl.

Bei SSH gibt es aber die viel bessere Lösung mit trusted keys zu arbeiten. Das habe ich auch nicht im Blut, aber ich meine es gibt einen Wikiartikel dazu, oder hast Du das schon erwogen und aus Gründen verworfen?

VladTepees

(Themenstarter)

Anmeldungsdatum:
8. Oktober 2012

Beiträge: 29

Danke für den Tipp! 💡 Habe es jetzt mit public keys gemacht und ich kann mich mit dem Skript per ssh einloggen ☺

Falls jemand dasselbe Problem hat, ist sehr einfach erklärt 😉 http://wiki.ubuntuusers.de/SSH#Authentifizierung-ueber-Public-Keys

Ziel des Ganzen ist es eigentlich ein Programm auf dem Server zu starten. Normalerweise logge ich mich manuell in 8 Terminals ein und starte dieses Programm.

Möchte dann stattdessen in 8 Terminals nur mein Skript ausführen, sodass dann das Prog schon geöffnet ist und ich gleich arbeiten kann.

Mein skript sieht nun so aus:

1
2
ssh -X vlad@ihelaputa.etec.uni-karlsruhe.de
matlab

Wenn ich das Skript ausführe bin ich im Terminal auf dem Server eingeloggt, er startet aber nicht das Programm. Wenn ich mich von Server durch "logout" abmelde, dann startet er das Programm (matlab) auf meinem Rechner.

Gibt es eine Möglichkeit dass er dieses Programm auf dem Server startet ?

Antiqua Team-Icon

Avatar von Antiqua

Anmeldungsdatum:
30. Dezember 2008

Beiträge: 4534

VladTepees schrieb:

Gibt es eine Möglichkeit dass er dieses Programm auf dem Server startet ?

ssh -X vlad@ihelaputa.etec.uni-karlsruhe.de matlab

Die Syntax von ssh ist

ssh [optionen] [user@]hostname [command]

In deinem Script ist jede Zeile ein Befehl für die lokale Shell, also erst wird der ssh-Befehl ausgeführt und erst wenn der Beendet ist, wird der Befehl in der nächsten Zeile ausgeführt.

Edit: hah, schneller als track bin ich nicht oft ☺,,

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Gibt es eine Möglichkeit dass er dieses Programm auf dem Server startet ?

Ja. Guck mal in man ssh: dort findest Du gleich oben in der Synopsis den Hinweis auf einen angehängten command ...

LG,

track

Edit: oh, Antiqua hatte den Hinweis schon gegeben ... sorry.

VladTepees

(Themenstarter)

Anmeldungsdatum:
8. Oktober 2012

Beiträge: 29

Antiqua schrieb:

ssh -X vlad@ihelaputa.etec.uni-karlsruhe.de matlab

Das habe ich schon versucht. Seltsamerweise kommt dann:

1
bash: matlab: command not found

Der Befehl

1
ssh -X vlad@ihelaputa.etec.uni-karlsruhe.de matlab

gibt auch so normal in die Kommandoziele eingegeben denselben Fehler aus ❓

Und nun ❓

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Aber beim manuellen einloggen wird matlab ohne Angabe des Pfads gefunden?

Dann würde ich

1
whereis matlab

eingeben, und danach den vollständigen Pfad versuchen, z.B.:

1
ssh -X vlad@ihelaputa.etec.uni-karlsruhe.de /usr/bin/matlab

VladTepees

(Themenstarter)

Anmeldungsdatum:
8. Oktober 2012

Beiträge: 29

Bingo! 😀

Jetzt funktioniert es ☺

Habe den ganzen Pfad zu matlab als Befehl eingegeben, also ungefähr wie im Beispiel von user unknown:

1
ssh -X user@server /path/to/matlab

Vielen Dank für die Tipps!

Jetzt muss ich das nicht mehr x-mal manuell machen!! 👍

Antworten |