Conexao SSH

10 respostas
H

Prezados estou tentado efetuar uma conexao SSH pelo postgresql, porem não estou conseguindo, segue código e erro:

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

public class CTestDriver {

    private static void doSshTunnel(String strSshUser, String strSshPassword, String strSshHost, int nSshPort, String strRemoteHost, int nLocalPort, int nRemotePort) throws JSchException {
        final JSch jsch = new JSch();
        Session session = jsch.getSession(strSshUser, strSshHost, 22);
        session.setPassword(strSshPassword);

        final Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);

        session.connect();
        session.setPortForwardingL(nLocalPort, strRemoteHost, nRemotePort);
        System.out.println("sessão:");
        System.out.println(session.isConnected());
    }

    public static void main(String[] args) {
        try {
            String strSshUser = "xxxx";                  // SSH loging username
            String strSshPassword = "xxxxx";                   // SSH login password
            String strSshHost = "xxxxx";          // hostname or ip or SSH server
            int nSshPort = 22;                                    // remote SSH host port number
            String strRemoteHost = "xxxxxx";  // hostname or ip of your database server
            int nLocalPort = 5432;                                // local port number use to bind SSH tunnel
            int nRemotePort = 5432;                               // remote port number of your database
            String strDbUser = "xxxx";                    // database loging username
            String strDbPassword = "xxxxxx";                    // database login password

            CTestDriver.doSshTunnel(strSshUser, strSshPassword, strSshHost, nSshPort, strRemoteHost, nLocalPort, nRemotePort);

            Class.forName("org.postgresql.Driver");
            Connection con = DriverManager.getConnection("jdbc:postgresql://xxxxxx:5432/exemplo_tabela", strDbUser, strDbPassword);
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.exit(0);
        }
    }
}
erro:
org.postgresql.util.PSQLException: Conexão negada. Verifique se o nome da máquina e a porta estão corretos e se o postmaster está aceitando conexões TCP/IP.
	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:215)
	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
	at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:144)
	at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
	at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
	at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)
	at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
	at org.postgresql.Driver.makeConnection(Driver.java:410)
	at org.postgresql.Driver.connect(Driver.java:280)
	at java.sql.DriverManager.getConnection(DriverManager.java:571)
	at java.sql.DriverManager.getConnection(DriverManager.java:215)
	at CTestDriver.main(CTestDriver.java:51)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:579)
	at org.postgresql.core.PGStream.<init>(PGStream.java:61)
	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:109)
	... 11 more

EDIT: eu estou conseguindo utilizar o PGADMIN logo, acredito que seja algum erro de configuração
estou usando o LINUX onde está instalado o BD, já fiz todas as alterações nos arquivos CONF.

10 Respostas

H

Eu sei que ninguém ai vive de responder perguntas em fórum, mas, isso o que eu to querendo é possível? procurei varias cosias no google e não encontrei…

H

Pessoal, por favor alguem pode me dar uma luz?

R

Cara sou novo em java também mas vamos lá.
Por que você precisa de uma conexão ssh? A questão é só abrir uma conexão com um banco remoto?
E no caminho do driver se põem o nome do banco e não da tabela.

DriverManager.getConnection("jdbc:postgresql://localhost:5432/nome_banco", strDbUser, strDbPassword);
H

entao… o banco está nas nuvens, eu tenho o IP do servidor, o usuário para conectar e a senha, tenho também o banco de dados instalado dentro dele que é o PostgreSQL com o usuário de conexão e a senha, pelo PGADMIN eu preencho o IP, o usuário , a senha do servidor nas nuvens e o usuário e senha do banco de dados, até ai tudo blz! o problema… via código java eu não consigo fazer isso, pois está dando o erro acima mencionado… fiz milhares de consulta no google e não consegui achar como fazer isso. então preciso confirmar, isso é possível via código java? sim? como eu faço? utilizo alguma classe em especial? esse é meu problema…

R

Cara nunca conectei remoto mas vou fazer aqui. Você criou o database no postgre não foi? Qual o nome dele?
O postgre ta configurando para aceitar conexão remota?

H

amigo, o nome da database é “exemplo_tabela”

R

Cara consegui aqui conectar remoto no MySQL. Tenho um servidor na nuvem também e era o seguinte. eu tive que configurar o mysql para aceitar conexão de qualquer ip. Estava dando o mesmo erro que o seu de acess denied antes. O código que eu usei.

public class conectaMySql {
    public static void main(String args[]){
        String endereco, user, passwd;
        endereco = "jdbc:mysql://xxxxxxx:3306/exemplo_db";
        user = "root";
        passwd = "toor";
        Connection con;
        try{
        con = DriverManager.getConnection(endereco, user, passwd);
        PreparedStatement pst = con.prepareStatement("select * from tabela_teste");
        
        ResultSet  rs = pst.executeQuery();
        while(rs.next()){
            System.out.println(rs.getString("nome"));
        }
        }catch(SQLException ex){
            ex.printStackTrace();
        }
        
    }
}

Um link que fala disso no postgre
http://tas.eti.br/blog/2011/10/habilitando-o-acesso-remoto-no-postgresql/

H

então.... eu consigo acessar via PGADMIN se não estivesse configurado não estaria funcionando.... por desencargo eu entrei para confirmar e está com todas as configurações conforme o link que voce me mandou...

eu fiz a classe assim:

public class PostCon {

    public static void main(String[] args) {

        String endereco, user, passwd;
        endereco = "jdbc:postgresql://xxx.xxx.xxx.xxx:5432/exemplo_tabela";
        user = "postgres";
        passwd = "xxx";
        Connection con;
        try {
            con = DriverManager.getConnection(endereco, user, passwd);
            PreparedStatement pst = con.prepareStatement("select * from tabela");

            ResultSet rs = pst.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString("coluna1"));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

    }

}

está dando a seguinte mensagem:

org.postgresql.util.PSQLException: Conexão negada. Verifique se o nome da máquina e a porta estão corretos e se o postmaster está aceitando conexões TCP/IP.
	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:215)
	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
	at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:144)
	at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
	at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
	at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)
	at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
	at org.postgresql.Driver.makeConnection(Driver.java:410)
	at org.postgresql.Driver.connect(Driver.java:280)
	at java.sql.DriverManager.getConnection(DriverManager.java:571)
	at java.sql.DriverManager.getConnection(DriverManager.java:215)
	at PostCon.main(PostCon.java:28)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:579)
	at org.postgresql.core.PGStream.<init>(PGStream.java:61)
	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:109)
	... 11 more
mais alguma ideia do que pode ser? lugar do erro:
con = DriverManager.getConnection(endereco, user, passwd);
R

Bom, se você ta com o drive e o ip certo e o usuário tem permissão para acesso remoto então não tenho mais ideias =/

H

obrigado mesmo assim, é f*da, consigo fazer a conexao via programa que administra banco de dados, só que não consigo fazer via classe java, alguem mais tem alguma ideia?

Criado 1 de outubro de 2014
Ultima resposta 6 de out. de 2014
Respostas 10
Participantes 2