Ich bin neu in ssh und ich habe eine Frage. Ich muss über SSH mit einem Gateway verbinden und innerhalb der SSH-Sitzung muss ich SSH zu einem anderen Server. Nur dann kann ich eine Verbindung zum mySQL-Server herstellen.Zugang mySql über mehrere ssh in Java
ssh <gateway>
ssh -L3306:db02:3306 [email protected]
Dann kann ich konfigurieren Putty und HeidySQL die mySQL-Datenbank zuzugreifen. So weit, so gut.
Aber jetzt möchte ich auf die mySQL-Datenbank über Java-Code zugreifen. Ich habe gegoogelt und einen Code gefunden, um Jsch zu benutzen.
Also, unten ist das Ergebnis des Codes. Aber wenn ich den Code ausführen, ist die Sitzung in Ordnung, Portforwarding ist in Ordnung.
Aber dieser Teil gibt mir eine Fehlermeldung:
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:"+nLocalPort, strDbUser, strDbPassword);
This is the error: java.sql.SQLException: Access denied for user 'dbUser'@'gateway.appl.local' (using password: YES)
Es scheint, wie die Port-Forwarding nicht wegen der Fehler gemacht wird, dass es an das Gateway verbinden zeigt: ‚dbUser‘ @‘ Gateway .appl.local‘
Nach einem erfolgreichen Port-Forwarding es so etwas wie diese zeigen soll: dbUser'@'**db02**.appl.local
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class MySqlConnOverSSH {
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);
}
/**
* Java Program to connect to remote database through SSH using port forwarding
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
try
{
String strSshUser = "sshUserName"; // SSH loging username
String strSshPassword = "sshPassWord"; // SSH login password
String strSshHost = "10.20.0.234"; // hostname or ip or SSH server
int nSshPort = 22; // remote SSH host port number
String strRemoteHost = "db02"; // hostname or ip of your database server
int nLocalPort = 3307; // local port number use to bind SSH tunnel
int nRemotePort = 3306; // remote port number of your database
String strDbUser = "dbUser"; // database loging username
String strDbPassword = "dbUserPW"; // database login password
MySqlConnOverSSH.doSshTunnel(strSshUser, strSshPassword, strSshHost, nSshPort, strRemoteHost, nLocalPort, nRemotePort);
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:"+nLocalPort, strDbUser, strDbPassword);
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
System.exit(0);
}
}
}
Sie nicht wollen, dies zu tun, ist es schrecklich langsam sein wird – e4c5
Was passiert, wenn Zwei Personen wollen die Portweiterleitung machen, die Sie in Ihrem zweiten Schritt beschreiben? –
Jungs, ich bin total neu zu shh .. also, geben Sie eine Alternative, wie ich dies erreichen kann. Ich bin dankbar für jede kleine Hilfe in der richtigen Weise. – JesusPassion