MySQL Workbench를 통한 SSH 터널링

MySQL Workbench를 통한 SSH 터널링

내 새 프로덕션 서버는 SSH 이중 터널을 통해서만 표시됩니다. 나는 도달할 수 있다대상 호스트원격 시스템에서 mysql cli 대신 Ubuntu 14.04 콘솔을 통해 명령을 실행 ssh targetHost하지만 gui Workbench를 통해 MySQL db에 액세스하고 싶습니다. 이를 달성하기 위해 Workbench에서 연결을 구성하는 방법은 무엇입니까?

내 거.ssh/config:

Host targetHost,  firewallHost
    User username
    IdentityFile /home/michalszulc/.ssh/id_rsa

Host targetHost
    proxycommand ssh -W %h:%p firewallHost

Host firewallHost
    hostname firewallHost.example.com
    port 2201
    passwordauthentication no
    controlmaster auto
    controlpath ~/

Host targetHost
    Hostname 123.123.123.123

답변1

과정은 간단합니다. 새 연결을 생성하고 SSH를 통한 표준 TCP/IP 연결 방법을 선택합니다. 터널을 제공하는 SSH 서버의 값:

  • SSH 호스트 이름: SSH 터널을 설정하기 위한 서버 주소입니다(SSH 서버와 MySQL은 구성에 따라 동일한 호스트이거나 동일한 네트워크 주소일 수 있음).
  • SSH 사용자 이름: SSH 서버의 사용자 이름입니다.
  • SSH 비밀번호: SSH 서버의 사용자 비밀번호(모드 비밀번호 인증이 구성된 경우).
  • SSH 키 파일: 서버에서 인증하는 데 사용되는 개인 키가 포함된 파일입니다( PasswordAuthentication해당 값은 SSH 서버에서 정책이 활성화된 경우입니다 no).

DBMS MySQL에 연결하기 위한 값입니다.

  • MySQL 호스트 이름: SSH 서버를 기준으로 MySQL 서비스가 실행되고 있는 호스트의 주소입니다. SSH 및 MySQL 서비스가 동일한 호스트에서 실행 중인 경우 eastbound 값은 localhost 또는 127.0.0.1입니다. 터널을 통한 연결이 설정되면 MySQL 서비스는 지시문에 설정된 값에 따라 localhost의 요청을 수신하기 때문입니다. bind_adressMySQL).
  • MySQL 서버 포트: MySQL에 연결하는 포트이며 일반적으로 3306입니다.
  • MySQL 사용자 이름: MySQL에 연결하기 위한 사용자 이름입니다. 즉, 유효한 MySQL 사용자여야 하며 터널에서 연결할 권한이 있어야 합니다.
  • 기본 스키마: SQL USE와 동일합니다.

답변2

설정이 올바른지 확실하지 않습니다. 따라서 firewallhost귀하의 작업대에서 호스트에 액세스할 수 있다고 가정합니다 . 따라서 방화벽 뒤의 "실제" mysql 서버에 액세스할 수 있도록 이 서버에 개방형 포트를 생성해야 합니다.

에 있는 경우 firewallhost수행 방법은 다음과 같습니다 .firewallhost

ssh -L localhost:33060:localhost:3306 someshelluser@databasehost

이렇게 하면 포트 33060(또는 여기에 있는 사용 가능한 포트)에서 localhost(어떤 네트워크 카드에서도 공개되지 않음)에 대한 openssh 터널이 생성되고, 이는 someshelluser로 연결되어 있기 때문에 firewallhost포트 3306(localhost에도 있지만 컴퓨터에서도)으로 터널링됩니다. databasehostdatabasehost.

이제 워크벤치를 연결할 수 있습니다.

  • SSH 호스트 이름:firewallhost
  • SSH 사용자 이름: 유효한 사용자firewallhost
  • SSH 비밀번호: 유효한 사용자 중 한 명의 패스입니다.
  • SSH 키 파일: 대체 키 파일

  • MySQL 호스트 이름: ( localhostlocalhost에서 터널을 열 때)firewallhost

  • MySQL 서버 포트: 33060
  • MySQL 사용자 이름: mysql 사용자

SSH 터널을 영구화하려면 firewallhost아래와 같이 화면을 통해 키 파일(액세스용)과 분리된 프로세스로 시작할 수 있습니다. databasehost이것은 rc.local이나 에서 사용하는 모든 것에 넣을 수 있습니다 firewallhost.

screen -d -m /usr/bin/ssh -v -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "BatchMode=yes" -i /your/.ssh/ssh_host_dsa_key -q -L locahost:33060:localhost:3306 someshelluser@databasehost

firewallhostSSH 터널을 생성한 컴퓨터에서 "새" 포트를 열어 이러한 SSH 터널이 한 컴퓨터에서 다른 컴퓨터(여기)로 모든 포트 흐름을 "전송"할 수 있다고 "상상"해야 합니다 . 이 작업은 공용 네트워크 카드에서도 수행할 수 있지만 firewallhostmysql 포트를 공개적으로 노출하고 싶지 않으므로 localhost에 있는 것이 좋습니다.)

고쳐 쓰다:

firewallhost알겠습니다. 영구 터널을 생성하기 위한 직접 액세스 권한이 없으므로 다른 방법을 시도해 보세요. ProxyCommand를 사용하여 연결할 수 있다고 말씀하셨습니다. "-o" 옵션이 아닌 인라인으로 작성할 때 ssh_config에 이것이 있다고 가정합니다.

ssh_config가 다음과 같은 경우:

Host server
    Hostname mysqlserver.example.org
    ProxyCommand ssh -W %h:%p firewallhost.example.org

그런 다음 다음을 시도해 볼 수 있습니다.'SSH 호스트 이름'작업대에서. 가능하면 이를 사용하여 SSH 매개변수를 제공할 수 있습니다. 테스트하지는 않았지만 애플리케이션이 호스트 이름 필드의 내용을 ssh 호출에 직접 전달하는 것은 드문 일이 아닙니다.

SSH 호스트 이름:

-o ProxyCommand="ssh -W %h:%p firewallhost.example.org" mysqlserver.example.org

이렇게 하면 방화벽이 있는 호스트를 통해 mysql 서버에 액세스할 수 있습니다. 여기에서 마치 워크벤치에서 예상하는 대로 mysqlserver에 직접 연결하는 것처럼 mysql 설정을 사용할 수 있습니다.

업데이트 2:

작성하신 대로 동일한 머신(Ubuntu 14)에 있고 뒤에 있는 mysql 데이터베이스에 연결할 수 있으므로 firewallhost콘솔에서 사용하는 워크벤치의 값만 사용해야 합니다. .ssh/config와 동일한 사용자로 워크벤치를 호출하면 워크벤치는 .ssh/config를 사용합니다.

마침내:

SSH 호스트 이름은 단순히 "targetHost"입니다. 여기서 .ssh/config의 프록시 명령은 "firewallHost"를 통해 "targetHost"로 경로를 지정합니다. SSH 사용자 이름은 "username"입니다(역시 .ssh/config에서).

MySQL 호스트 이름은 localhost 및 포트 3306이어야 합니다. 이는 ssh를 통해 "targetHost"에 액세스할 때 질문에 작성한 내용과 정확히 일치해야 합니다. 워크벤치는 ssh를 통해 연결한 후(!) 이 값을 사용하기 때문입니다.

관련 정보