Spanish Enviar ficheros por SFTP

TheArkhangel

Member
Licensed User
Longtime User
Saludos a todos, he estado intentado utilizar la librería JSch para poder enviar ficheros mediante SFTP, pero siempre me bloquea la conexión indicándome que falla la autentificación.

Querría saber si alguien podría ayudarme con el código, el sftp está activo en un MAC y accedo perfectamente a el desde Filezilla, pero desde B4A no logro llegar.

Aquí está el link del post que puse en el general.

https://www.b4x.com/android/forum/threads/sftp-how-to-made-it.69361/

Agradezo cualquier ayuda.
 

dar2o3

Active Member
Licensed User
Longtime User
Asegurate de que tu servidor mac usa SFTP y no FTPS son protocolos distintos, ya nos contarás.
 

TheArkhangel

Member
Licensed User
Longtime User
Como no tengo la mas remota idea de mac....he utilizado el programa filezilla para conectar por fstp al mac y ha conectado correctamente.
Entiendo que se está utilizando entonces SFTP. Por qué el error que me provoca siempre es el mismo el de Aut Fail

Hay algo que igual no significa nada, en esta imagen cuando se guarda la clave cifrada para autentificar.....lo hace en este directorio y no se si eso es correcto.
Screenshot_2016-07-26-14-21-51.png

Si alguien tiene alguna idea agradecería la ayuda ya que tengo otro programa que envía perfectamente por ftp a ese mismo mac las fotos que se hacen desde el dispositivo movil, pero al usar SFTP simplemente siempre me indica lo mismo.
 

dar2o3

Active Member
Licensed User
Longtime User
Pon el codigo que usas para la conexión actualmente, he visto algo que me parece extraño en el hilo en ingles.
 

TheArkhangel

Member
Licensed User
Longtime User
dar2o3 gracias, aquí va el codigo,

B4X:
#Region  Project Attributes
    #ApplicationLabel: sftp test
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified

#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim sftp1 As SFtp
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Dim ListView1 As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
Try

     If FirstTime Then
         'use real credentials!
        sftp1.Initialize("sftp1", "Domingo Gonzalez", "12345", "192.168.1.71", 22)
        sftp1.SetKnownHostsStore(File.DirRootExternal , "hosts.txt")
       
    End If
    Activity.LoadLayout("1")
   
    AddInfo("Try send first file")
    sftp1.UploadFile (File.DirRootExternal ,"1.jpg","/1.jpg")
   
    'sftp1.List ("/ftp/*.*")
   
Catch
    AddInfo (LastException)
End Try
End Sub

Sub Activity_Resume
    sftp1.Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub
Sub sftp1_UploadCompleted (ServerPath As String, Success As Boolean)
    Log(ServerPath & ", Succes=" & Success)
    If Success = False Then
        'upload incomplete?
        Log(LastException.Message)
        Msgbox(LastException.Message,"Error:")
    End If
       
End Sub
Sub sftp1_CommandCompleted (Command As String, Success As Boolean, Reply As String)
    AddInfo (Command & " success=" & Success & " " & Reply)
End Sub

Sub sftp1_PromptYesNo (Message As String)
   Dim res As Int = Msgbox2(Message, "", "Yes", "", "No", Null)
   'The next line might be a bit confusing. It is a condition.
   'The value will be True if res equals to DialogResponse.POSITIVE.
   sftp1.SetPromptResult(res = DialogResponse.POSITIVE)
End Sub

Sub sftp1_ShowMessage (Message As String)
    AddInfo (Message)
End Sub
Sub sftp1_ListCompleted (ServerPath As String, Success As Boolean, Folders() As SFtpEntry, Files() As SFtpEntry)
    If Success Then
        Dim i As Long
        For i = 0 To Files.Length -1
            AddInfo (Files(i).Name)
        Next
        AddInfo ("List command completed")
    Else
        AddInfo ("List command error")
    End If
End Sub


Sub AddInfo (msj As String )
    ListView1.AddSingleLine(msj)
End Sub
Sub Button1_Click
    sftp1.CloseNow
    ExitApplication
End Sub
 

dar2o3

Active Member
Licensed User
Longtime User
Hola de nuevo, acabo de probar el código que me has enviado contra una raspberry pi y funciona perfectamente.
Voy a instalar un servidor de sftp para configurarlo desde 0 a ver si encuentro el problema, pero ya sabemos que el problema está en el servidor.

No lo e dicho pero la raspberry viene con ssh avtivado por defecto y jsch se basa en ssh2, así que sin hacer nada especial en la raspberry (con raspbian) ya puedes enviar y recibir archivos desde el movil de forma muyyyy sencilla.
 
Last edited:

dar2o3

Active Member
Licensed User
Longtime User
Para comprobar si es el directorio correcto donde te crea el archivo de la clave "host.txt" mira desde un gestor de archivos (el que te venga en el movil por defecto y comprueba si coincide el path, en mi caso es distinto, pero eso no quiere decir nada, mi movil no tiene tarjeta de memoria por eso me cambia el path.
 

TheArkhangel

Member
Licensed User
Longtime User
Te agradezco enormemente la ayuda, entonces el problema debe venir del mac ?
No he configurado nunca un SFTP en el así que no tengo ni idea de como hacer la prueba.
Si te pediría me indicaras como hacerlo en la raspberry pi 2 para probarlo yo mismo....como configurar un SFTP.

Y gracias deseando me indiques los pasos.
 

dar2o3

Active Member
Licensed User
Longtime User
Para usar sftp contra la raspberry 2, no hace falta configurar nada, solo usa para la conexión el usuario y la contraseña configurados en la raspberry y listo, los mismos que uses con putty (o cualquier otro) para entrar por ssh.
B4X:
  sftp1.Initialize("sftp1", "pi", "pi", "192.168.0.13", 22)

Y para subir archivos.

B4X:
 sftp1.UploadFile (File.DirRootExternal ,"1.jpg","Desktop/1.jpg")

Esto dejara el archivo 1.jpg en el escritorio de la raspberry, espero haberme explicado, cualquier cosa me dices.

No te puedo ayudar con la configuración e sftp, nunca lo e usado hasta ahora, cuando tenga un rato intentaré configurar uno.
 

TheArkhangel

Member
Licensed User
Longtime User
He utilizado VNC para conectarme.....en cuanto pongo la opcion de cifrado no me deja conectarme y la aplicación me da este error al ejecutarse.

/1.jpg, Succes=false
com.jcraft.jsch.JSchException: SSH_MSG_DISCONNECT: 2 Too many authentication failures for pi from 192.168.1.35 port 52071 ssh2

Screenshot_2016-07-28-11-43-40.png


en la Raspberry pi 2 he ido a raspi-config y e activado el ssh y surgen dos errores......

20160728_114652.png

A ver si con tu ayuda puedo solventarlo todo, porque me empiezo a dar cuenta que posiblemente todos los problemas vengan de las configuraciones de los SFTP y no del programa tal y como me indicaste a ti te funcionó correctamente.

Alguna idea para la raspberry pi 2 ?
 

dar2o3

Active Member
Licensed User
Longtime User
No soy ningún experto en este tema pero prueba a hacer lo siguiente

  1. Back up /etc/ssh/sshd_config
  2. Incrementa el valor de MaxAuthTries en sshd_config
  3. stopsrc -s sshd ; startsrc -s sshd
(No es que sea muy recomendable aumentar el número de intentos de loguin, pero solo es para ver si es ese el problema, si se soluciona con esto pensamos como arreglarlo de forma mas profesional.)

Prueba despues de hacer estos cambios.
Ya nos contarás.
 

TheArkhangel

Member
Licensed User
Longtime User
No ha hecho falta hacer los cambios.

Resulta curioso ya que mi contraseña en raspberry 2 tiene 11 caracteres....los dos últimos son numeros...repetidos....si pongo uno o los dos por VNC entra igual.
Pero en B4A al ponerle solo uno lo ha aceptado y volcado el fichero.....

Que sucede en Mac ?
 

dar2o3

Active Member
Licensed User
Longtime User
Lo siento pero yo no he visto un Mac en mi vida bueno sí los he visto pero nunca he trasteado con ellos esperemos que alguno que entienda te pueda responder
 

TheArkhangel

Member
Licensed User
Longtime User
He cambiado los parámetros de conexión para el mac...

sftp1.Initialize("sftp1", "Domingo Gonzalez", "12345", "192.168.1.71", 22)

Dando como resultado siempre com.jcraft.jsch.JSchException: Auth fail

Es decir.....algo está mal en el ssh de mac que no deja conectar y da error de autentificación.......

como se configurará correctamente un SFTP en mac para poder estar seguro ?
 

TheArkhangel

Member
Licensed User
Longtime User
Tu ayuda ha sido inestimable para poder asegurar que la app podía enviar los ficheros.....dar2o3 muchas gracias....como dices...a ver si alguien tiene nociones y puede ayudarme en esta parte pues yo voy igual que tú....
 
Top