mehrere Befehle in shell skript

Gandalf2210

Commodore
Registriert
Mai 2010
Beiträge
4.160
Hallo
bin ein Linux Einsteiger und versuche gerade gewisse Sachen zu automatisieren.
Ich habe einen debian server, den ich per ssh ansteuer.
Jetzt muss ich in der Shell ssh meinedomain eingeben und danach mein Passwort.
dafür wollte ich jetzt ein kleines Skript machen.
Er verbindet sich auch mit meinem Server, nur den zweiten befehl, das Passwort eingeben macht er nicht, wahrscheinlich weil der erste befehl noch nicht "zu ende" ist, weil vorne in der shell nicht benutzername@rechnername:~ steht.
Wie kann ich also dem skript beibringen, dass es einfach ganz stupide 1:1 die Sachen eingeben soll, die ich sonst mit der Tastatur eingebe?

mfg Gandalf2210
 
Kannst du mal schreiben was du bisher hast?
 
Das geht doch viel einfacher und sicherer... KeePass.

Aber wenn du unbedingt eine Lösung willst, bei der dein Root-Passwort im Klartext in einem Shellscript steht... Zeig mal deinen bisherigen Code her.

Edit: Ich gehe einfach davon aus, dass du von einem Desktop den Server ansteuern willst.
 
entschuldigung, ich verstehe nicht ganz; was habe ich?
ich habe einen linux server und anstatt

ssh meinedomain
passwort

einzugeben soll das mein skript machen, allerdings tut sich bei der passwort eingabe nichts.
das war auch nur ein beispiel, es gibt auch andere Sachen, wo man "zwischendrin" was eingeben soll, aber ich denke, dass der das nicht ausführt

Code:
#!/bin/bash
ssh meinedomain
yes
passwort

wenn ich per ssh zugreiffen will muss ich noch mit 'yes' bestätigen, dass der die selsbt signierten zertifikate annimmt und dann mein passwort eingeben
 
Zuletzt bearbeitet:
naja, eigentlich kannst du das so schon hinschreiben^^

ssh DOMAINNAME
PASSWORT
 
Zuletzt bearbeitet:
leider gibt der mir dann mein passwort in der konsole aus NACHDEM ich es per hand eingegeben habe und bereits eingeloggt bin

ja, von meinem linux rechner soll der debian server fergesteuert werden
 
und wenn dus hinter ein ander schreibst? also
ssh NAME PW
oder du installierst dir pico, da kannste zumindest dein name speichern^^
 
Zuletzt bearbeitet:
Jetzt sag doch mal durch, welche Systeme du nutzt, was genau du machen willst, und was du bis jetzt probiert hast...

Wenn du dir einfach nur das Passwort-Eingeben sparen willst, schau dir die Methode mit SSH-Keys an. Sicherer und einfacher...

Oder - wie gesagt - KeePass.
 
auf meinem dektop lubuntu x32 auf meinem Server Debian 7 x64
ich will ein skript machen, was meinen counterstrike server startet.
dazu gebe ich folgendes ein:

Code:
ssh domain
yes
passwort
cd /home/server/
./csgoserver start

das soll jetzt mein skript nacheinander ausführen

probiert habe ich die Sachen 1:1 in eine Datei zu schreiben, sie per chmod ausführbar zu machen und per shell auch ausgeführt.
den ersten befehl (ssh) führt er noch aus, aber das passwort muss ich selbst eingeben.
 
Zuletzt bearbeitet:
Mach doch:

nano /etc/rc.local

su - server -c '/home/server/csgoserver start'

wenn "server" dein username ist - davon geh ich jetzt mal auf wegen dem home verzeichnis.
Damir startet der Server wenn der root Server neu bootet.

und dann:

crontab -e

0 5 * * * /home/server/csgoserver update-restart > /dev/null 2>&1

für automatische Updates-Neustart um 5:00

Dann brauchst du dich um nichts mehr kümmern.

Im Idle brauch das Ding bei mir 1% @FX8150 und 2,5% @4GB RAM - also wirklich nichts.
Immer extra starten wär mir da zu stressig.
 
Zuletzt bearbeitet:
das war auch nur ein beispiel konkret ging es darum in der konsole eingaben zu tätigen, wenn der hauptbefehl noch nicht vollendet ist, die aufgerufene ssh prozedur z.B noch auf ein passwort und eine zertifikat bestätigung wartet
 
Benutz bitte SSH Keys, dazu wurden sie geschaffen. sudo kannst du ggf. auch so konfigurieren, dass kein Passwort benötigt wird (falls du das willst). Vielleicht bekommst du da auch was mit pam_ssh_agent_auth hin. Hab das selbst noch nicht probiert.
 
Für deinen Anwendungszweck geht das folgendermaßen am einfachsten und sicher:

1. SSH Schlüsselpaar erstellen
2. Diesen Befehl ausführen (oder ihn als Einzeiler in ein Script schreiben):
Code:
ssh server@domain './csgoserver start'

Erklärung:
Durch das SSH Schlüsselpaar musst du kein Passwort mehr eingeben.
Mit dem Befehl meldest du dich mit dem Benutzer "Server" an (und landest in /home/server) und schickst direkt den Startbefehl ab.

Edit:
Noch schöner wäre es wohl so:
Code:
ssh deinUser@domain './home/server/csgoserver start'
 
Zuletzt bearbeitet:
Ein Bash-Skript ist keine Folge von Tastatureingaben sondern von Kommandos. In Beitrag #4 ist Zeile 2 ("ssh domain") so ein Kommando und in Ordnung. Dein Versuch, in Zeilen 3 und 4 einfach "yes" und "passwort" hinzuschreiben und diese Worte damit an die ssh zu verfüttern, ist aber grundsätzlich Unsinn. So funktionieren bash-Skripte nicht. Das ist allerdings nicht dein Hauptproblem sondern nur ein Syntaxfehler.

Beheben wir mal den Syntaxfehler, kommen wir zu sowas:

#!/bin/bash
ssh meinedomain << XXX
yes
passwort
...
XXX

Das funktioniert aber trotzdem nicht. Ssh (und andere Programme wie su) weigert sich aus gutem Grund, ein Passwort aus einem Skript anzunehmen. Ssh verhält sich mit Absicht in einem Skript an der Stelle anders, als man es von üblichen Programmen gewöhnt ist, die sämtliche Eingabe von jedem beliebigen STDIN lesen.

Wenn bei ssh die Standardeingabe kein Terminal ist(ist beim Skript so) wird das Passwort nicht von dort gelesen sondern entweder via $SSH_ASKPASS oder vom das Skript kontrollierenden Teminal - falls vorhanden. Existiert keins, scheitert die Passwortabfrage schon vorm Stellen der Fage. Man kann dies mit expect o.ä. umgehen, wenn man sich der Folgen bewußt ist. Besser ist, eine andere Art der Authentikation als über ein Passwort zu wählen.

Schau dir mal in der ssh-Doku ("man ssh") den Abschnitt "AUTHENTICATION" an, insbesondere wie "public key authentication" funktioniert. Das wäre für deinen Fall eine brauchbare Variante, wie schon Yuuri oben schrieb.
 
Zuletzt bearbeitet:
Du kannst auch einfach in Deine eigene .bashrc ein alias eintragen, soltest Du Dich öfters mal mit dem Server verbinden wollen. So brauchst Du dann nur noch das verwendete Kürzel eingeben, um eine komplexe Folge aufzurufen.

Schau Dir mal Deine .bashrc an, ein paar alias sind bereits meist standardmäßig definiert.

Wenn Du dann noch Cliff's Hinweis beachtest, wird's recht komfortabel. Du kannst auch screen installieren, wenn Du nicht ständig verbunden sein willst, während Du einen Befehl ausführst. Dazu fügst Du einfach ein 'screen -d -RR' an die .profile des users an (einfachste Lösung).
 
Zurück
Oben