복붙노트

[SPRING] 봄 부팅 SSH Mysql?

SPRING

봄 부팅 SSH Mysql?

워크 벤치를 통해 오픈 오피스 mysql에 성공적으로 연결할 수 있습니다. 스프링 부트 애플리케이션을 통해 어떻게 동일한 작업을 수행 할 수 있습니까?

내 application.properties :

# Connection url for the database
spring.datasource.url = jdbc:mysql://<SSH_username>:<SSH_password>@<mysql_hostname>:<mysql_port>/<mysql_schema>

# Username and password
spring.datasource.username = <mysql_username>
spring.datasource.password = <mysql_password>

내 개인 키는 어디에서 제공합니까?

해결법

  1. ==============================

    1.SSH (예 : MySql-Openshift 사용)를 통해 로컬 응용 프로그램에서 Mysql 서버에 액세스하려면 "단"의 추가 작업으로 DataSource 객체가 이전에 SSH 연결을 설정해야합니다. 연결.

    SSH (예 : MySql-Openshift 사용)를 통해 로컬 응용 프로그램에서 Mysql 서버에 액세스하려면 "단"의 추가 작업으로 DataSource 객체가 이전에 SSH 연결을 설정해야합니다. 연결.

    평소와 다행스럽게도 그렇게 할 수있는 방법은 여러 가지가 있지만 가장 간단한 간단한 방법을 설명하려고합니다.

    1) 클래스 경로에 Jcraft 라이브러리 추가 (SSH 연결 작업에 사용)

    Maven을 pom.xml에 추가하면 다음 요소가 추가됩니다.

       <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.53</version>
        </dependency>
    

    또는 http://www.jcraft.com/jsch/에서 다운로드하십시오.

    2) SSH 서버에 연결할 클래스를 만듭니다 (여기에서는 이전 단계에서 가져온 라이브러리를 사용합니다)

    예 :

    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.Session;
    
    public class SSHConnection {
    
    private final static String S_PATH_FILE_PRIVATE_KEY = "C:\\Users\\Val\\.ssh\\privatekeyputy.ppk"; \\windows absolut path of our ssh private key locally saved
    private final static String S_PATH_FILE_KNOWN_HOSTS = "C:\\Users\\Val\\.ssh\\known_hosts";
    private final static String S_PASS_PHRASE = "mypassphrase";
    private final static int LOCAl_PORT = 3307; 
    private final static int REMOTE_PORT = 3306; 
    private final static int SSH_REMOTE_PORT = 22; 
    private final static String SSH_USER = "87a34c7f89f5cf407100093c";
    private final static String SSH_REMOTE_SERVER = "myapp-mydomain.rhcloud.com";
    private final static String MYSQL_REMOTE_SERVER = "127.6.159.102";
    
    private Session sesion; //represents each ssh session
    
    public void closeSSH ()
    {
        sesion.disconnect();
    }
    
    public SSHConnection () throws Throwable
    {
    
        JSch jsch = null;
    
            jsch = new JSch();
            jsch.setKnownHosts(S_PATH_FILE_KNOWN_HOSTS);
            jsch.addIdentity(S_PATH_FILE_PRIVATE_KEY, S_PASS_PHRASE.getBytes());
    
            sesion = jsch.getSession(SSH_USER, SSH_REMOTE_SERVER, SSH_REMOTE_PORT);
            sesion.connect(); //ssh connection established!
    
            //by security policy, you must connect through a fowarded port          
            sesion.setPortForwardingL(LOCAl_PORT, MYSQL_REMOTE_SERVER, REMOTE_PORT); 
    
    }
    }
    

    이 클래스는 SSH 연결을 설정하기위한 모든 관련 정보를 유지합니다. 우리는 두 가지 메소드 만 정의했다는 것을 주목하십시오. 생성자는 클래스의 유일한 비 정적 필드로 표현되는 ssh 연결을 인스턴스화하기위한 생성자와, ssh 연결의 연결 해제 / 닫기를 얻는 다른 메소드를 정의합니다.

    3) ServletContextListener 인터페이스 (2 단계에서 정의 된 클래스의 객체 보유)를 구현하는 리스너를 정의합니다.

    앱이 시작될 때 ssh 연결을 만들려고 시도하고, 앱이 죽을 때 닫습니다.

    @WebListener
    public class MyContextListener implements ServletContextListener {
    
    private SSHConnection conexionssh;
    
    
    public MyContextListener() 
    {
        super();
    }
    
    /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    public void contextInitialized(ServletContextEvent arg0) 
    {
        System.out.println("Context initialized ... !");
        try 
            {
                conexionssh = new SSHConnection();
            } 
        catch (Throwable e) 
            {
                e.printStackTrace(); // error connecting SSH server
            }
    }
    
    /**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    public void contextDestroyed(ServletContextEvent arg0) 
    {
        System.out.println("Context destroyed ... !");
        conexionssh.closeSSH(); // disconnect
    }
    

    4) Spring을 사용하여 dispatcher-servlet.xml의 DataSource 객체를 평소와 같이 설정합니다. 그러나 포워드 포트를 가리 킵니다

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3307/yourSchema" />
        <property name="username" value="admin4ajCbcWM" />
        <property name="password" value="dxvfwEfbyaPL-z" />
    </bean>
    

    그리고 그게 전부입니다. 또 다른 가능성은 여러분 자신의 DataSource를 만들고, Spring에서 제공하는 것을 확장하고, ssh 기능을 추가하는 것입니다. 어쩌면 여기에 설명 된 솔루션이 더 잘 분리 된 것일 수 있습니다.

  2. ==============================

    2.openshift에서는 MySQL 데이터베이스에 직접 연결합니다.

    openshift에서는 MySQL 데이터베이스에 직접 연결합니다.

    Openshift는 일련의 환경 변수를 제공합니다. 참조 : https://developers.openshift.com/en/managing-environment-variables.html#database-variables

    연결에 사용해야합니다.

    application.properties 내부에서 다음과 같은 환경 변수를 사용할 수 있습니다.

    spring.xxx=${OPENSHIFT_MYSQL_DB_HOST:localhost}
    

    여기서 OPENSHIFT_MYSQL_DB_HOST는 환경 변수 이름이고 localhost는 기본값입니다.

  3. from https://stackoverflow.com/questions/33526427/spring-boot-ssh-mysql by cc-by-sa and MIT license