Bash-Skript automatische Eingaben

naked_chef

New member
Hallo Leute,

diesmal geht es um ein Bash-Skript.

Das sieht im moment noch so aus :

Code:
#!/bin/bash
######################

PASSWORD=$(makepasswd)

echo "Bitte Username angeben: "
read USERNAME

useradd -s /bin/false $USERNAME
smbpasswd -a $USERNAME

echo $PASSWORD
Ich möchte das Anlegen von Sambausern erleichtern, da sie wenig bis keine erfahrung mit Linux haben.

Makepasswd schreibt das erzeugte Passwort in die Variable PASSWORD.
Dann wird ein Username abgefragt, welcher erst dem System und dann Samba bekannt gemacht wird. Da der User sich nicht auf dem System einloggen soll bekommt er die /bin/false als Shell zugewiesen und kein Passwort für das System gesetzt.

Mit smbpasswd -a mächte ich den User hinzufügen und jeder Admin weiß jetzt was kommt und kennt meine Frage ...

Wie kann ich die 2 Abfragen nach den Passwoertern so automatisieren, dass automatisch das Password aus der Variable PASSWORD verwendet wird ?

Thanks Chef
 

bitmuncher

Moderator
Die Loesung deines Problems duerfte ein expect-Skript sein, das die Eingabe fuer dich uebernimmt. Alternativ benutzt du 'smbpasswd -a -U benutzer%passwort'.
 

lookshe

Member of Honour
Bei "useradd" gibt es auch die Möglichkeit das Passwot mitzugeben, aber nur in verschlüsselter Form. Ein Beispiel dafür müsste ich noch zu Hause haben, oder keksinat0r hat es, denn er hat es geschrieben.
Ich kann aber erst heut abend nachsehen.

Zu expect: Es ist nicht unbedingt gut das zu nutzen, da es des öfteren zu Fehlern kommen kann, selbst wenn alles stimmt. Der keks kann davon ein Lied singen.
 

naked_chef

New member
@bitmuncher

also die lösung mit smbpasswd -a -U benuter%passwort funktioniert nicht.
das skript habe ich wie folgt abgeändert:

Code:
#!/bin/bash
######################

PASSWORD=$(makepasswd)

echo "Bitte Username angeben: "
read USERNAME

useradd -s /bin/false $USERNAME
smbpasswd -a -U $USERNAME%$PASSWORD

echo $PASSWORD
es kommt die username-abfrage, dann wird er mittels useradd angelegt, aber smbpasswd erwartet nochimmer eine eingabe.

@lookshe
es geht nicht darum useradd ein passwort zuübergeben sondern smbpasswd.
das systempasswort würde ihnen auch nichts nützen, da die shell der user /bin/false ist ;)
 

bitmuncher

Moderator
Original von lookshe
Zu expect: Es ist nicht unbedingt gut das zu nutzen, da es des öfteren zu Fehlern kommen kann, selbst wenn alles stimmt. Der keks kann davon ein Lied singen.
Die Erfahrung kann ich nicht bestaetigen. Zu Fehlern kommt es vor allem dann, wenn das expect-Skript nicht ordentlich geschrieben ist. :p
 

lookshe

Member of Honour
Bei uns war es der Fall, dass wenn es mehrmals nacheinander ausgeführt wurde, irgendwann krachte. Und es war definitiv ordentlich geschrieben, da es immer wieder das gleiche war und bei ein oder zweimaliger Ausführung wunderbar funktionierte.
 

naked_chef

New member
Alles klar, danke für die Hilfe.

Das Problem habe ich soebend gelöst.
Für alle Interessenten hier meine Lösung.

Die Datei user.sh (wird nach /usr/local/sbin gelegt und verlinkt auf smbuser)
Code:
#!/bin/bash
######################

PASSWORD=$(makepasswd)

echo "Bitte Username angeben: "
read USERNAME

echo "Passwort = $PASSWORD"

useradd -s /bin/false $USERNAME
./smbuser.exp $USERNAME $PASSWORD
Die Datei smbuser.exp (wird ebenfalls nach /usr/local/sbin gelegt)
Code:
#!/usr/bin/expect
#####################

spawn smbpasswd -a [lindex $argv 0]
set password [lindex $argv 1]
expect "password:"
send "$password\r"
expect "password:"
send "$password\r"
expect eof
Funktioniert einwandfrei.
Es muss aber expect und makepasswd installiert sein.
 
I

IsNull

Guest
Hallo,
Um meine Entschlüsselung mehrer Container, (die aber das gleiche PW haben) zu erleichtern, möchte ich das PW nur einmal eingeben müssen. Nur funktionieren die unten aufgeführten Beispiele nicht...

Muss ich jetzt auch dieses "expect" Zeugs nutzen, oder geht das auch mit reinem bash?

PHP:
#!/bin/bash

echo "Bitte LUKS Passwort angeben: "
read PASSWORD

sudo cryptsetup luksOpen /dev/mapper/nvidia_bcabibee1 CryptRaid01 $PASSWORD
sudo mount /dev/mapper/CryptRaid01 /srv/350GBRaid

sudo cryptsetup luksOpen /dev/hdb Crypt500GB 
echo $PASSWORD
sudo mount /dev/mapper/Crypt500GB /srv/500GB
*die php tags wurden nicht von mir hinzugefügt^^*


thx & Gruss
IsNull
 

bitmuncher

Moderator
Code:
sudo cryptsetup luksOpen /dev/hdb Crypt500GB 
echo $PASSWORD
Da du mit "echo" auf STDOUT und nicht auf STDIN schreibst, wirst du damit kein Passwort eingeben können. Die beste Lösung dürfte daher expect sein.
 

keksinat0r

New member
OT:
Ich kann mich zwar grad nicht erinnern, was das Expect-Script genau gemacht hat,
allerdings trat das Phänomen auf, dass wenn das Script öfter als 4 oder 5 mal innerhalb von einem kurzen Zeitraum ausgeführt wurde, es schlicht an einem "expect" hängen blieb...
Wenn man dann ein wenig gewartet hat ging es plötzlich wieder,
allerdigns nur die 4, 5 mal, dann hing es wieder, usw usf...


@T:
Für Perl gibt es ebenfalls ein "Expect", dass ( meinen Erfahrungen nach ) wesentlich besser funktioniert wie das "Bash-Expect" :)

MFG - Keks
 

linuxerr

New member
Original von naked_chef
Alles klar, danke für die Hilfe.

Das Problem habe ich soebend gelöst.
expect ist nicht notwendig, siehe man smbpasswd
-s
This option causes smbpasswd to be silent (i.e. not issue prompts)
and to read its old and new passwords from standard input, rather
than from /dev/tty (like the passwd(1) program does). This option is
to aid people writing scripts to drive smbpasswd
 

bitmuncher

Moderator
@linuxerr:
1. Ich wäre dir sehr dankbar, wenn du nicht ständig bereits gelöste Threads nochmal ausgraben würdest. Es gibt noch diverse, für die noch Lösungen gesucht werden. :)
2. Arbeite mal mit dem Silent-Mode von smbpasswd und du wirst feststellen, dass es nur Probleme bereitet, z.B. wenn Sonderzeichen im Passwort vorkommen, weswegen ziemlich überall dazu geraten wird expect zu benutzen bzw. das von expect mitgelieferte autopasswd.
 

linuxerr

New member
Original von bitmuncher
@linuxerr:
1. Ich wäre dir sehr dankbar, wenn du nicht ständig bereits gelöste Threads nochmal ausgraben würdest. Es gibt noch diverse, für die noch Lösungen gesucht werden. :)
expect ist keine lösung, sondern murks
2. Arbeite mal mit dem Silent-Mode von smbpasswd und du wirst feststellen, dass es nur Probleme bereitet, z.B. wenn Sonderzeichen im Passwort vorkommen, weswegen ziemlich überall dazu geraten wird expect zu benutzen bzw. das von expect mitgelieferte autopasswd.
wieso sollte es da probleme geben? die gibt es nur bei fehlerhaftem einschieben der passworte in stdin von smbpasswd, zb mit echo oder ungequoteten sonderzeichen.... die probleme gibt es dann nicht nur mit smbpasswd, wenn schlampig programmiert wird.
 

bitmuncher

Moderator
Original von linuxerr
expect ist keine lösung, sondern murks
Das dürfte Ansichtssache sein. Selbst auf der Samba-Mailingliste finden sich fast nur Lösungen mit expect. Alternativ baut man dann also in sein Shellscript noch einen Parser ein um Sonderzeichen ordentlich zu escapen usw. Ob das besser ist als ein kleines expect wage ich mal anzuzweifeln. ;)
 
Oben