Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 18

Thema: Python3 sftp

  1. #1
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.254

    Python3 sftp

    Hi,

    ich komme mit einem scp/sftp problem nicht weiter

    An der Stelle mit dem ssh.connect macht das Ding genau das, einen connect und weil ich dort nur schreibrechte, also rechte zum hochschieben habe, macht es einen Auth fail, wie komme ich da weiter um den File zu schieben

    Code:
    ## SSH Connect Variables
    import os
    import paramiko
    WorkHome = os.environ.get("HOME")
    SshUser = 'MyOtherUSer'
    SshTarget = 'localhost'
    SshFile = WorkHome + '/.ssh/id_rsa'
    SshKeyFile = paramiko.RSAKey.from_private_key_file(SshFile)
    
    
    ssh = paramiko.SSHClient()
    ssh.load_system_host_keys()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(SshTarget, username=SshUser, pkey=SshKeyFile)
    sftp = ssh.open_sftp()
    
    
    sftp.put(LocalFile, TargetPath)
    sftp.close()
    ssh.close()
    Gruss Stefan
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  2. #2
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.819
    Kannst du ggf. den traceback posten?
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  3. #3
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.254
    Hi nopes,

    hier der Output
    Code:
    Python 3.4.2 (default, Oct  8 2014, 10:45:20) 
    [GCC 4.9.1] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> ## SSH Connect Variables
    ... import os
    >>> import paramiko
    >>> WorkHome = os.environ.get("HOME")
    >>> SshUser = 'vnz'
    >>> SshTarget = 'localhost'
    >>> SshFile = WorkHome + '/.ssh/id_rsa'
    >>> SshKeyFile = paramiko.RSAKey.from_private_key_file(SshFile)
    >>> 
    >>> 
    >>> ssh = paramiko.SSHClient()
    >>> ssh.load_system_host_keys()
    >>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    >>> sftp = ssh.open_sftp()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python3/dist-packages/paramiko/client.py", line 379, in open_sftp
        return self._transport.open_sftp_client()
    AttributeError: 'NoneType' object has no attribute 'open_sftp_client'
    >>> ssh.connect(SshTarget, username=SshUser, pkey=SshKeyFile)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python3/dist-packages/paramiko/client.py", line 307, in connect
        look_for_keys, gss_auth, gss_kex, gss_deleg_creds, gss_host)
      File "/usr/lib/python3/dist-packages/paramiko/client.py", line 519, in _auth
        raise saved_exception
      File "/usr/lib/python3/dist-packages/paramiko/client.py", line 500, in _auth
        allowed_types = self._transport.auth_publickey(username, key)
      File "/usr/lib/python3/dist-packages/paramiko/transport.py", line 1232, in auth_publickey
        return self.auth_handler.wait_for_response(my_event)
      File "/usr/lib/python3/dist-packages/paramiko/auth_handler.py", line 208, in wait_for_response
        raise e
    paramiko.ssh_exception.AuthenticationException: Authentication failed.
    >>>
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  4. #4
    Elefantenversteher Avatar von florian0285
    Registriert seit
    Jun 2016
    Beiträge
    1.054
    Vielleicht sund auch mehr Details zu deinen Rechten und deinem key hilfreich. Darfst du dich einloggen? Mit ssh?
    Matthäus 7:3 Was siehst du aber den Splitter in deines Bruders Auge, und wirst nicht gewahr des Balkens in deinem Auge?

  5. #5
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.819
    Ich vermute das der Schlüssel nicht geladen werden kann, jedenfalls klingt diese Meldung so:
    Code:
    AttributeError: 'NoneType' object has no attribute 'open_sftp_client'
    Auch mein Tipp ist, zu nächst mit ssh bzw. sftp den Login via Console probieren. Viel Erfolg!
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  6. #6
    Elefantenversteher Avatar von florian0285
    Registriert seit
    Jun 2016
    Beiträge
    1.054
    Mach dazu vielleicht auch mal ein print SshKeyFile und prüfe ob der Pfad keinen Fehler hat und welche Zugriffsrechte (600) darauf liegen.
    Matthäus 7:3 Was siehst du aber den Splitter in deines Bruders Auge, und wirst nicht gewahr des Balkens in deinem Auge?

  7. #7
    Universaldilletant Avatar von fork
    Registriert seit
    Dec 2001
    Ort
    Frankfurt/Main
    Beiträge
    1.175
    Ich würde mal sagen, das ist sehr deutlich:

    Code:
    paramiko.ssh_exception.AuthenticationException: Authentication failed.
    Mehr Info bekommst Du bestimmt im Auth-Log / ssh-Log vom Zielserver.

    Ich habe Dein Script mal ausprobiert. Funktioniert bei mir einwandfrei.

    Auch mein Tipp ist, zu nächst mit ssh bzw. sftp den Login via Console probieren.
    Jupp. Und zwar genau mit den Optionen, die auch das Script aufruft. Keine Aliase, sondern die gleichen Werte. Vielleicht nochmal ein -v dazu.

  8. #8
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.254
    Hm.. jetzt bin ich verwirrt, ich will etwas testen damit ich hier was zum poosten habe und nun funktioniert es ohne aenderung.

    Ich denke da wurde auf der Gegenseite etwas gefixt und ich machte alles richtig.

    Damit muss ich mich wohl bei euch entschuldigen
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  9. #9
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.254
    Neues Skkript, ungeloestes gleiches Problem.

    An der Stelle
    Code:
    ssh.connect(SshTarget, username=SshUser, pkey=SshKeyFile) 
    sftp = ssh.open_sftp()
    wird ein SSH Login gemacht, um anschliessend darueber die Dateiuebertragung zu machen.
    Leider habe ich bei der Gegenstelle nur "sftp only", daher mein Problem.
    Gibt es fuer paramiko einen Parameter um sftp only zu machen?
    Sonst bleibt mir nichts anderes uebrig als das native "sftp" zu verwenden, was ich eigentlich vermeiden wollte
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  10. #10
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.819
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  11. #11
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.254
    Hi Nopes,

    danke fuer die Links, aber die Stackoverflow Loesung hat das gleiche Verhalten wie mein Versuch, nur eine andere Syntax.
    Pysftp habe ich gesehen, aber das System auf dem das laufen soll laeuft mit Debian 8 und dort ist pysftp nicht in den repos und pip darf hier nicht verwendet werden.
    Ich werde wohl oder uebel den nativen sftp client verwenden

    Gruss Stefan
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  12. #12
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.254
    So nachdem das eine weile lag habe ich mich an subprocess versucht, komme aber nicht weiter

    ich versuche folgendes, da das Parameter uebergeben nicht so will wie ich. Ich scheitere den Befehl fuer subprocess.Popen in ein dict zu uebersetzen.

    Code:
    sftp -i $HOME/.ssh/id_rsa USER@HOST:/files/reporting.log.$(date -d "1 day ago"  +%Y-%m-%d) reporting.log
    vielleicht hat ja auch jemand eine Idee wie ich sinnvoll Variablen uebergeben kann
    Code:
    Today = (datetime.today())
    YesterDay = (Today - timedelta(1))
    YesterDayDate = (YesterDay.strftime("%Y-%m-%d"))
    
    SourceRemotePath = '/files/reporting.log.'
    TargetRemotePath = 'rsync://HOST/PATH'
    WorkHome = (os.environ.get("HOME"))
    TmpPath = (WorkHome + '/tool_tmp/report')
    ### Pseudo
    sftp -i $HOME/.ssh/id_rsa USER@HOST:/files/reporting.log.YESTERDAYDATE reporting.log
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  13. #13
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.819
    Zum Einen kannst du die natürlich in Python bestimmen - gerade diese Date-Variablen, zum Anderen kannst du die Umgebung vorgeben: https://docs.python.org/3/library/su...en-constructor
    Code:
    import subprocess
    
    
    p = subprocess.Popen(['cmd','-arg1','arg2'], env={'FOO': 'BAR'})
    bzw. kopieren und anpassen: https://docs.python.org/3/library/os.html#os.putenv
    Code:
    import os
    import subprocess
    
    
    e = dict(os.environ)
    e['FOO'] = 'BAR'
    p = subprocess.Popen(['cmd', '-arg1', 'arg2'], env=e)

    Dein Problem ist aber hier beschrieben: https://docs.python.org/3/library/su...used-arguments
    ...
    If shell is True, the specified command will be executed through the shell. This can be useful if you are using Python primarily for the enhanced control flow it offers over most system shells and still want convenient access to other shell features such as shell pipes, filename wildcards, environment variable expansion, and expansion of ~ to a user’s home directory...
    also sollte shell=True das Problem abschalten:
    Code:
    import subprocess
    
    
    p = subprocess.Popen(['sftp', '-i',  '$HOME/.ssh/id_rsa', 'USER@HOST:/files/reporting.log.$(date -d "1 day ago"  +%Y-%m-%d)', 'reporting.log'], shell=True)
    Geändert von nopes (15.11.16 um 08:44 Uhr) Grund: evil typo
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  14. #14
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.254
    Ich habe von einem Kollegen gestern folgende Antwort bekommen

    Code:
    ich hab mal ein wenig mit subprocess.popen rumgespielt. bash 
    substitution geht da wohl nicht mit. also dein $(date ...)
    Ich denke jetzt kommt die maximal haessliche Variante, der Aufruf eines seperaten Skriptes zum Zuge
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  15. #15
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.254
    Hm.. naechstes Problem, ich kann mit einem Bash Skript die Datei abholen

    Code:
    subprocess.Popen(['/opt/ui/data/user/git/project/sftp_fu.sh'], shell=True)
    aber das Python3 Skript laeuft nicht weiter, es bleibt nur der stdout mit der fetching information stehen.

    Code:
    Connected to Machine.local.domain
    Fetching /files/reporting.log.2016-11-16 to /opt/ui/data/user/tool_tmp/reporting.log
    ich kann sehen, dass die ganze Datei abgeholt wird

    das Bash Skript sieht folgendermassen aus
    Code:
    #!/bin/bash
    
    sftp -i /opt/ui/data/USER/.ssh/id_rsa USER@HOST:/files/reporting.log.$(date -d "1 day ago"  +%Y-%m-%d) Parthtotarget/reporting.log
    
    exit
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


Ähnliche Themen

  1. Sftp
    Von chris@online im Forum Linux als Server
    Antworten: 9
    Letzter Beitrag: 24.03.10, 23:28
  2. SFTP und key
    Von FRAD im Forum Linux als Server
    Antworten: 1
    Letzter Beitrag: 22.05.06, 13:57
  3. ssh/sftp
    Von Faith Healer im Forum Linux als Server
    Antworten: 1
    Letzter Beitrag: 01.03.03, 17:56
  4. SSH nur mit SFTP
    Von Firew im Forum Linux als Server
    Antworten: 6
    Letzter Beitrag: 14.12.02, 22:06
  5. mc und sftp
    Von SAdemar im Forum Linux als Server
    Antworten: 0
    Letzter Beitrag: 09.05.02, 18:05

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •