rsync ssh und Passwort Eingabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Beim Befehl pexpect wird 1 Zeichenkette erwartet. :mrgreen:
BlackJack

@feldmaus: Nein, das ist nur eine Möglichkeit.
deets

@BlackJack

Seit der Fukushima-Katastrophe wird Ignoranz in feldmaus gemessen. Die uebliche Hintergrundignoranz liegt bei wenigen milli-feldmaus. Doch das Vollpfostometer zeigt in diesem Thread Werte von bis zu einem feldmaus! Das sind Bereiche, die bis dato nur am grossen Retardotron im Hirnforschungszentrum Juelich gemessen wurden. Vielleicht sollte man mal die Wissenschaftler hierauf aufmerksam machen...
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

deets hat geschrieben:
Seit der Fukushima-Katastrophe wird Ignoranz in feldmaus gemessen. Die uebliche Hintergrundignoranz liegt bei wenigen milli-feldmaus. Doch das Vollpfostometer zeigt in diesem Thread Werte von bis zu einem feldmaus! Das sind Bereiche, die bis dato nur am grossen Retardotron im Hirnforschungszentrum Juelich gemessen wurden. Vielleicht sollte man mal die Wissenschaftler hierauf aufmerksam machen...
You made my Day :lol:

Gruß...busfahrer
Alles wird gut ;-)
lunar

@deets: Dieser Beitrag war jetzt nicht unbedingt nötig ... :roll:
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

deets hat geschrieben:@BlackJack

Seit der Fukushima-Katastrophe wird Ignoranz in feldmaus gemessen. Die uebliche Hintergrundignoranz liegt bei wenigen milli-feldmaus. Doch das Vollpfostometer zeigt in diesem Thread Werte von bis zu einem feldmaus! Das sind Bereiche, die bis dato nur am grossen Retardotron im Hirnforschungszentrum Juelich gemessen wurden. Vielleicht sollte man mal die Wissenschaftler hierauf aufmerksam machen...
Mit Verlaub, ich finde diesen Beitrag entwürdigend. :roll:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also ich finde ein allein stehender Satz a la "Ignoranz wird in 'feldmaus' gemessen" wäre schon lustig gewesen. Aber die Verknüpfung mit einer Katastrophe, die Menschenleben massiv negativ beinflusst hat und noch beeinflussen wird, sowie die Benutzung von Schimpförtern entwerten die Prise Humor und verkehrt diese imho auch ins Gegenteil.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

@deets
Also ich habe kein Problem damit, aber mach dich drauf gefasst das Du von mir dann auch mal ein Konter bekommst, nicht das Du nachher heulst. :lol: Außerdem frage ich mich schon die ganze Zeit warum Du mich für ignorant hältst? Ich bin nicht ignorant, sondern ich verstehe halt einiges nicht so gut wie BlackJack oder Leonidas. Ich habe alles was BlackJack vorgeschlagen hatte umgesetzt, sind ja auch gute Ideen. Ich verstehe Ihn halt nicht immer auf Anhieb. Die Jungs hier wandern nun mal in anderen Spheren. :mrgreen: Und deine Idee mit pexpect habe ich auch eingebaut, nur wollte ich einiges geklärt haben.

Grüße Markus
deets

@feldmaus

Ueber meinen Traenenfluss reden wir dann, wenn's so weit ist. Da bin ich recht entspannt.

Die Ignoranz zeigt sich in so diversen Dingen:

- der Tatsache, dass du pexpect empfohlen bekamst, aber dauerhaft ignoriert hast, bis es gar nicht mehr anders ging.
- dass du selbst zugibst, keine Ahnung von Sicherheit zu haben, aber im gleichen Atemzug behauptest, die *sichereren* Alternativen zu einem im Skript gespeicherten Klartextpasswort waeren *unsicherer*.
- das du in aehnlich langwierigen Diskussionen in einem anderen Thread davon ueberzeugt worden bist, dass es besser ist, commandos mit einer Liste statt einem muehselig escapeden String aufzurufen - nur, um dann wieder mit pexpect bei Null anzufangen.

In der Summe also das bitten um Rat, aber ignorieren desselben. Das ist in meinem Buch unter 'Ignoranz' vermerkt.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Also ich habe gerade das Problem das irgendwo in meiner Zeichenkette ein Fehler steckt. Hier der Code:

Code: Alles auswählen

    def rsync ():
        exclude_pre=katalog[eintrag]['Exclude'][0]+' '
        exclude_post=katalog[eintrag]['Exclude'][1]+' '
        if antwort2 == ('s' or 'S') :
            try:
                source=katalog[eintrag]['Client'][0]+BENUTZER+katalog[eintrag]['Client'][1]+' '
                target=BENUTZER+katalog[eintrag]['Server'][0]+BENUTZER+katalog[eintrag]['Server'][1]
                print 'source ist: '+source
                print 'target ist: '+target
                (command_output,  exitstatus)=pexpect.run(['rsync ',
                '-e ',
                '\"ssh -l '+BENUTZER+'\" ', 
                '-a ',
                '--delete-after ',
                '--stats ',
                '--progress ',
                exclude_pre+exclude_post, 
                source, 
                target],
                withexitstatus=1, events={'(?i)password':benutzer_passwoerter[BENUTZER]+'\n'})
                print command_output
            except Exception,  e:
                print 'Fehler: '+str(e)
Als Fehlermeldung bekomme ich bei einem Kommando mit vorhandem exclude:

Code: Alles auswählen

Fehler: The command was not found or was not executable: rsync -e "ssh -l markus" -a --delete-after --stats --progress --exclude Machines/Standard/Snapshots/* /home/markus/.VirtualBox/ markus@feld-server:/home/markus/VirtualBox@feld-bertlap/.
Ohne Exclude bekomme ich z.b.:

Code: Alles auswählen

Fehler: The command was not found or was not executable: rsync -e "ssh -l markus" -a --delete-after --stats --progress .
Hat Jemand eine Idee?

Grüße Markus
BlackJack

@feldmaus: Sieht so aus als wenn man nur bei `pexpect.spawn()` die Argumente als Liste übergeben kann aber nicht bei `pexpect.run()`. Das ist doof.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das Snippet

Code: Alles auswählen

if antwort2 == ('s' or 'S') :
macht nicht ganz bestimmt nicht das was du willst:

Code: Alles auswählen

In [1]: 's' or 'S'
Out[1]: 's'

In [2]: acceptable = 's' or 'S'

In [3]: answer = 's'

In [4]: answer == acceptable
Out[4]: True

In [5]: answer = 'S'

In [6]: answer == acceptable
Out[6]: False
Alternativen:

Code: Alles auswählen

In [7]: acceptable = ('s', 'S')

In [8]: answer in acceptable
Out[8]: True

In [9]: answer = 's'

In [10]: answer in acceptable
Out[10]: True

In [11]: acceptable = 'sS'

In [12]: answer in acceptable
Out[12]: True

In [13]: answer = 'S'

In [14]: answer in acceptable
Out[14]: True
(Und natuerlich das schnoede `answer == 's' or answer == 'S'`)
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

BlackJack hat geschrieben:@feldmaus: Sieht so aus als wenn man nur bei `pexpect.spawn()` die Argumente als Liste übergeben kann aber nicht bei `pexpect.run()`. Das ist doof.
Also in der Doku steht ein Beispiel:

Code: Alles auswählen

child = pexpect.spawn ('ls', ['-latr', '/tmp'])
Also muss der eigentliche Befehl vor der Liste mit den Argumenten stehen, oder geht das wirklich auch nur mit einer Liste?
BlackJack

@feldmaus: Das ist `spawn()` -- Du hattes es ja aber mit `run()` versucht.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Ich weiß, ich bin sofort zu spawn gesprungen. Hier gibt es zumindest Beispiele mit Listen. Übersichtlichkeit sollte schon sein.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Irgendwie kennt rsync keine Option --exclude, sondern nur --exclude= mit dem Gleichheitszeichen am Ende, nur dann muss das Argument direkt nach dem Gleichheitszeichen beginnen, ansonsten erkennt er es als Quelle. Hat Jemand eine Idee?

Grüße Markus
BlackJack

@feldmaus: Was für ein ``rsync`` verwendest Du denn da? Das geht auch ohne das ``=``.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Also ich nutze rsync Version

Code: Alles auswählen

rsync  version 3.0.7  protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes
Also in der manpage steht ein Beispiel ohne "=", aber wenn ich es ohne "=" ausführe bekomme ich die Meldung

Code: Alles auswählen

rsync: --exclude : unknown option
Und mit dem "=" versucht er mein Exclude-Argument als Source zu verwenden

Code: Alles auswählen

building file list ... 

rsync: link_stat "/home/markus/bin/__ThereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__ " failed: No such file or directory (2)

rsync: link_stat "/home/markus/bin/ " failed: No such file or directory (2)

0 files to consider
Bei diesem Beispiel hat meine Quelle keine Auszuschliessenden, trotzdem verwende ich die Option "--exclude[=]", da ich mein Programm sonst auch durch eine Fallunterscheidung unnötig verkomplizieren würde. Wie auch immer, die Quellen mit Auszuschliesenden funktionieren so zumindest nicht.

Was ich nicht verstehe ist, warum er mein /home/markus/bin/ Verzeichnis nicht findet. Und von markus@server:/home/markus/bin/ (meinem Ziel-Verzeichnis) wurde hier nichts erwähnt.
BlackJack

@feldmaus: Du solltest Dich wirklich ganz dringend endlich mal damit beschäftigen wie die Übergabe von Argumenten funktioniert. Auf C-Ebene. Und was zum Beispiel eine Shell alles macht um von einer Zeile in der Shell auf eine Argumentliste auf C-Ebene zu bekommen. Genau da machst Du nämlich schon wieder Fehler.

Da steht nämlich nicht, dass ``rsync`` die Option '--exclude' nicht kennt, sondern dass es die Option '--exclude ' nicht kennt. Da ist ein Leerzeichen was da nicht hin gehört:

Code: Alles auswählen

bj@s8n:~$ rsync '--exclude'
rsync: --exclude: missing argument
rsync error: syntax or usage error (code 1) at main.c(1443) [client=3.0.7]
bj@s8n:~$ rsync '--exclude '
rsync: --exclude : unknown option
rsync error: syntax or usage error (code 1) at main.c(1443) [client=3.0.7]
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Es funktioniert :mrgreen:
BlackJack hat geschrieben:@feldmaus: Du solltest Dich wirklich ganz dringend endlich mal damit beschäftigen wie die Übergabe von Argumenten funktioniert. Auf C-Ebene. Und was zum Beispiel eine Shell alles macht um von einer Zeile in der Shell auf eine Argumentliste auf C-Ebene zu bekommen. Genau da machst Du nämlich schon wieder Fehler.
Mich mögen die Leerzeichen halt besonders gerne :mrgreen: Es funktioniert :D Es kommen aber noch einige andere Funktionen mit rein z.b. falls ein falsches Passwort eingegeben wurde.

Und hier der Code mit ungekürzten Leerzeichen :)

Code: Alles auswählen

                    PASSWORT=raw_input('Bitte Passwort fuer '+BENUTZER+' eingeben:')
                    benutzer_passwoerter[BENUTZER]=PASSWORT
                    child=rsync()
                    child.logfile = sys.stdout
                    child.expect('password:', timeout=3)
                    child.logfile = sys.stdout
                    child.sendline(PASSWORT)
                    child.logfile = sys.stdout
                    while not child.expect(pexpect.EOF):
                        PASSWORT=raw_input('Falsches Passwort!\nBitte Passwort fuer '+BENUTZER+' eingeben:')
                        benutzer_passwoerter[BENUTZER]=PASSWORT
                        child.expect('password:', timeout=3)
                        child.sendline(PASSWORT)
Nach erfolgreichem Beenden von dem rsync Befehl springt er trotzdem noch in die while-Schleife. Der Datenstrom müsste doch zu Ende sein, dann dürfte er doch auch nicht mehr in meine Schleife springen, oder interpretiere ich den Befehl child.expect(pexpect.EOF) falsch?
Antworten