Я новичок в ssh, и у меня есть вопрос. Мне нужно подключиться через ssh к шлюзу и в рамках сеанса ssh я должен отправить ssh на другой сервер. Только тогда я могу подключиться к серверу mySQL.доступ mySql через несколько ssh в java
ssh <gateway>
ssh -L3306:db02:3306 [email protected]
Тогда я могу настроить Putty и HeidySQL для доступа к базе данных MySQL. Пока, так хорошо.
Но теперь я хочу получить доступ к базе данных mySQL с помощью java-кода. Я googled и нашел некоторый код, чтобы использовать Jsch.
Итак, ниже приведен код. Но когда я запускаю код, сеанс в порядке, portforwarding - это нормально.
Но эта часть дает мне ошибку:
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)
Похоже, что перенаправление портов не выполняется из-за ошибки, которые он показывает, чтобы подключиться к шлюзу: «DBUser» @» шлюз .appl.local»
После успешным перенаправлении он должен показать что-то вроде этого: 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);
}
}
}
вы не хотите, чтобы это сделать, это будет ужасно медленно – e4c5
Что произойдет, если два человека хотят сделать пересылку порта, которую вы описываете на втором этапе? –
Ребята, я совершенно новичок в shh .. так что дайте альтернативу, как я могу это сделать. Я благодарен за каждую небольшую помощь в правильном направлении. – JesusPassion