sftp wie?

Spezielle Fragen zu Netzwerk-Protokollen, DNS, Socket ...
Antworten
Benutzeravatar
gambi
Moderator
Beiträge: 321
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

sftp wie?

Beitrag von gambi » Do 22. Jan 2015, 22:06

Hallo Gambas-Gemeinde,

wie kann ich eine sftp Verbindung zwischen einem sftp Server und einem Client realisieren?
Idealerweise mit gb.net oder gb.net.curl.

gg

Benutzeravatar
gambi
Moderator
Beiträge: 321
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: sftp wie? -GELÖST-

Beitrag von gambi » Sa 24. Jan 2015, 20:38

Ich habe jetzt eine Lösung für sftp bzw scp gefunden.
Mit den verfügbaren Gambas-Komponenten ist derzeit wohl nichts möglich.

Also wieder zur Terminalsteuerung mit Prozess: gambas code
Private $hsFTP As Process

Public Sub btnConnect_Click()
Dim sCommand As String[]
Dim sCopy, sHost, sDatei, sOutput As String
   
   sCopy = "scp"
   sHost = Hostname (in der Form user @examle.com:)                        'Auf den "Doppelpunkt" am Ende achten!
  'Das Leerzeichen zwischen user und @ natürlich weglassen, Die Gambas Syntax verhaut das nur zu einer Mailadresse!
   sDatei = Remote Verzeichnis und Dateiname (/home/meineRemoteDatei) 
   sOutput = Lokales Verzeichnis und Dateiname (/home/meineLokaleDatei)

   sCommand = [sCopy, sHost & sDatei, sOutput]
   $hsFTP = Exec sCommand For Input Output As "sftpProcess"
   
End

Public Sub sftpProcess_Read()
Dim sBuffer, sPW As String
   
   sPW = Passwort für ssh
   sBuffer = ""

   Read #$hsFTP, sPuffer, Lof($hsFTP)    
   If InStr(sBuffer, "password:") Then                          'Wenn zur Eingabe des Passworts aufgefordert wird, dann...
      Print #$hsFTP, sPW                                        '...übergebe das Passwort
   Endif
   
   If InStr(sBuffer, "100%") Then Print "Feddisch"              'Wenn der Download abgeschlossen ist, schreibe das in die Gambas-Konsole.
   
End

Achtung:
READ WRITE funktioniert hier nicht. Es muss INPUT OUTPUT genommen werden. Warum? Keine Ahnung.

gg

tux_
Moderator
Beiträge: 950
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: sftp wie?

Beitrag von tux_ » Sa 24. Jan 2015, 21:17

Es muss INPUT OUTPUT genommen werden. Warum? Keine Ahnung.
Es liegt wahrscheinlich daran, dass ein Passwort abgefragt wird. Einen Prozess "For Input Output" zu starten, bedeutet, seine Standard-Streams in Pseudo-Terminals umzuleiten, waehrend "For Read Write" einfache Pipes benutzt. Ein Programm, das eine Passwort-Abfrage durchfuehrt, moechte sein Eingabe-Geraet so einstellen, dass das Passwort bei der Eingabe nicht sichtbar wird ("kein Echo"). Da es fuer Pipes unmoeglich ist, dies zu gewaehrleisten, bricht ein solches Programm unter diesen Umstaenden i.d.R. zur Sicherheit ab. Es verlangt zumindest ein Pseudo-Terminal.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Benutzeravatar
gambi
Moderator
Beiträge: 321
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: sftp wie?

Beitrag von gambi » Sa 24. Jan 2015, 21:24

Hallo tux_,
danke für die Erklärung. Das wäre noch der Erwähnung im Gambas-Buch wert.
Ich schicke eine Mail an Hans.

gg

Benutzeravatar
tionov
Site Admin
Beiträge: 284
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: sftp wie?

Beitrag von tionov » So 10. Mär 2019, 15:39

Hi, ich melde mich spät, aber mit einer weiteren Lösung. Dazu müssen auf dem Rechner die Pakete sshpass und sftp installiert sein:
gambas code
    Dim sFilepath, sUser, sPass, sHost, sPath, sPort, cmd As String

    sUser = "Username"
    sPass = "Password1233456"
    sHost = "sftpserver.example.com"
    sPath = "/path/to/put/the/file"

    sFilepath = "/tmp/FileToSend.txt"

    'braucht sshpass

    System.Shell = "/bin/bash"
    cmd = "sshpass -e sftp -oBatchMode=no -b - " & sUser & "@" & sHost & ":" & sPath & " <<< $'put " & sFilepath & "'"
    Shell cmd With ["SSHPASS=" & sPass] Wait
Alles Gute,

4tionov

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste