+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 4 su 4

Connessione SSH al database Postgres con VB.NET

  1. #1
    ljt
    ljt non  in linea Scolaretto
    Post
    240
    Like Inviati  
    0
    Like Ricevuti  
    0
    Buonasera a tutti,

    sto cercando di connettermi al database postgres in modo alternativo utilizzando la connessione SSH (porta 22), utilizzando vb.net.
    La stringa per la connessione che sto tentando di utilizzare la seguente:
    Dim conn As NpgsqlConnection
    conn = New NpgsqlConnection("Server=192.168.1.1;Port=22;User id=UTENTE;Password=PWD;Database=DATABASE;")
    conn.Open()
    
    Ma ricevo errore di I/O
    La password e l'utente sono corretti e a questo punto le mie domande sono:

    La stringa che utilizzo corretta?
    Devo aggiungere qualcos'altro?

    Utilizzando il programma DBEAVER in SSH riesco a connettermi.
    In vb.net al server postgres mi connetto correttamente via ssh.
        Dim host As String = "192.168.1.1"
        Dim Utente As String = "UTENTE"
        Dim password As String = "PWD"
        Dim connInfo As New Renci.SshNet.PasswordConnectionInfo(Host, Utente, Password)
        Dim sshClient As New Renci.SshNet.SshClient(connInfo)
        Dim cmd As Renci.SshNet.SshCommand = Nothing
    
           Using SshClient
                Try
                    SshClient.Connect()
                Catch
                    sshClient.Disconnect()
                    Exit Sub
                End Try
            End Using
    
    Grazie a tutti

  2. #2
    ljt
    ljt non  in linea Scolaretto
    Post
    240
    Like Inviati  
    0
    Like Ricevuti  
    0
    La prima parte del problema sono riuscito a risolverlo.
    Qui il codice corretto:
           'CONNESSIONE IN SSH AL SERVER POSTGRES
            Dim connectionInfo As New PasswordConnectionInfo("192.168.1.1", "MioUtente", "MiaPassword")
            connectionInfo.Timeout = TimeSpan.FromSeconds(30)
            Dim client = New SshClient(connectionInfo)
            client.Connect()
    
            'CREA IL TUNNEL SSH
            Dim portFwld As New ForwardedPortLocal("127.0.0.1", Convert.ToUInt32(22), "192.168.1.1", 
                         Convert.ToUInt32(5432))
            'OPPURE PIU' SEMPLICEMENTE:        
            'Dim portFwld as new ForwardedPortLocal("127.0.0.1", 22, "192.168.2.78", 5432)
    
            client.AddForwardedPort(portFwld)
            portFwld.Start()
    
            'CONNESSIONE AL DATABASE POSTGRES
            Dim connessione As NpgsqlConnection
            connessione = New NpgsqlConnection("Server=127.0.0.1;Port=22;User id=MioUtente;Password=MiaPassword;Database=MioDatabase;")
            Dim CMD As New NpgsqlCommand
            Dim SQL As String = ""
            Dim RD As NpgsqlDataReader
    
            connessione.Open()
    
    Fino a qui tutto ok, la connessione avviene.
    Poi ho aggiunto i comandi per l'esecuzione della query:
            SQL = "select * from MioDatabase;"
            CMD.CommandText = SQL
            RD = CMD.ExecuteReader
    
            If RD.Read Then
                MsgBox(RD("totale").ToString.Trim)
            Else
                MsgBox("Nessun dato nel database", MsgBoxStyle.Information)
            End If
    
    Purtroppo mi viene restituito l'errore nella riga:
    RD = CMD.ExecuteReader
    
    Con l'errore seguente:
    The Connection is not open.

    Eppure la connessione risulta aperta regolarmente.

    Qualche suggerimento in merito?

    Grazie di nuovo

  3. #3
    ljt
    ljt non  in linea Scolaretto
    Post
    240
    Like Inviati  
    0
    Like Ricevuti  
    0
    Trovato l'arcano.
    mancava il comando:
    CMD.Connection = connessione
    
    La connessione c'era ma non avevo assegnato il comando da eseguire.
    Dunque il codice corretto il seguente:
    'CONNESSIONE IN SSH AL SERVER POSTGRES
            Dim connectionInfo As New PasswordConnectionInfo("192.168.1.1", "MioUtente", "MiaPassword")
            connectionInfo.Timeout = TimeSpan.FromSeconds(30)
            Dim client = New SshClient(connectionInfo)
            client.Connect()
    
            'CREA IL TUNNEL SSH
            Dim portFwld As New ForwardedPortLocal("127.0.0.1", Convert.ToUInt32(22), "192.168.1.1", 
                         Convert.ToUInt32(5432))
            'OPPURE PIU' SEMPLICEMENTE:        
            'Dim portFwld as new ForwardedPortLocal("127.0.0.1", 22, "192.168.2.78", 5432)
    
            client.AddForwardedPort(portFwld)
            portFwld.Start()
    
            'CONNESSIONE AL DATABASE POSTGRES
            Dim connessione As NpgsqlConnection
            connessione = New NpgsqlConnection("Server=127.0.0.1;Port=22;User id=MioUtente;Password=MiaPassword;Database=MioDatabase;")
            Dim CMD As New NpgsqlCommand
            Dim SQL As String = ""
            Dim RD As NpgsqlDataReader
    
            connessione.Open()
    
            'CODICE MANCANTE
            CMD.Connection = connessione
    
            SQL = "select * from MioDatabase;"
            CMD.CommandText = SQL
            RD = CMD.ExecuteReader
    
            If RD.Read Then
                MsgBox(RD("totale").ToString.Trim)
            Else
                MsgBox("Nessun dato nel database", MsgBoxStyle.Information)
            End If
    
    Grazie a tutti e speriamo che serva a qualcun'altro.

  4. #4
    ljt
    ljt non  in linea Scolaretto
    Post
    240
    Like Inviati  
    0
    Like Ricevuti  
    0
    Scusate se riapro la seguente discussione, ma dato che l'argomento strettamente inerente e collegato ho preferito non aprirne uno nuovo.
    Vengo subito al dunque.
    Il suddetto codice viene utilizzato in un programma dove possibile scegliere il tipo di connessione al database, in questo caso Postgres.
    Scendendo un po pi nel dettaglio, nella mainForm c' una voce "Configurazione" che mi permette di scegliere se utilizzare "Tunnel SSH" oppure no.
    La scelta dell'operatore viene salvata in un file di testo nella cartella del programma.
    Il problema che ho il seguente:
    Quando apro la "Configurazione" per cambiare altre voci e il parametro "connessione SSH" su si e salvo mi viene visualizzato il seguente errore:
           Di norma  consentito un solo utilizzo di ogni indirizzo di socket (protocollo/indirizzo di rete/porta)
    
    Dunque all'inizio dell'apertura della form "Configurazione" ho aggiunto:
            client.RemoveForwardedPort(portFwld)
            portFwld.Stop()
            client.Disconnect()
    
    Ovvero rimuovo il portforwarded e lo fermo. Per precauzione chiudo anche la connessione SSH (client.disconnet) (Vedere codice sopra postato)
    Ma ci nonostante ottengo comunque l'errore. Come se la chiusura non avesse nessun risultato.
    Sinceramente non riesco a capirne la motivazione.

    Avete qualche consiglio in merito.

    Grazie a tutti


    Riporto il codice che utilizzo per aprire la connessione SSH e il portforwarded:
       Public Sub ApriTunnelSSH(ByVal controllo As Boolean)
    
            'CONNESSIONE IN SSH AL SERVER DEL DATABASE POSTGRES
            Dim connectionInfo As New PasswordConnectionInfo(Server, UtenteSSH, PasswordSSH)
            connectionInfo.Timeout = TimeSpan.FromSeconds(30)
            Dim client = New SshClient(connectionInfo)
            Dim portFwld As New ForwardedPortLocal("127.0.0.1", Convert.ToUInt32(PortaSSH), Server, Convert.ToUInt32(Porta))
    
            'CHIUDE IL TUNNEL SSH
            client.RemoveForwardedPort(portFwld)
            portFwld.Stop()
            client.Disconnect()
    
            Try
                client.Connect()
            Catch
                MsgBox("Impossibile connettersi in SSH al server", MsgBoxStyle.Critical)
                Exit Sub
            End Try
    
            'CREA IL TUNNEL SSH FACENDO IL FORWARD DALLA PORTA 22 ALLA PORTA 5432
            Try
                client.AddForwardedPort(portFwld)
                portFwld.Start()
            Catch ex As Exception
                MsgBox("Attenzione si  verificato il seguente errore:" & vbCrLf & vbCrLf & _
                       ex.Message, MsgBoxStyle.Critical)
                Exit Sub
            End Try
    
        End Sub
    

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. php connessione a database
    Da Uccio87 nel forum PHP
    Risposte: 4
    Ultimo Post: 15-06-2010, 15:35
  2. Connessione a database via ADO.NET
    Da Ivan86 nel forum ASP 3, ASP .Net
    Risposte: 4
    Ultimo Post: 04-11-2008, 14:39
  3. Collegamento al db postgres
    Da rikka78 nel forum Visual Basic .Net
    Risposte: 2
    Ultimo Post: 15-05-2006, 11:28
  4. [Migrazione]Postgres / MySQL
    Da GiulioCesare nel forum Altri Database Server
    Risposte: 1
    Ultimo Post: 01-04-2006, 15:10
  5. Connessione al database
    Da botanico nel forum ASP 3, ASP .Net
    Risposte: 1
    Ultimo Post: 28-10-2005, 15:19