MySQL Workbench를 통한 SSH 터널

MySQL Workbench를 통한 SSH 터널

내 새 프로덕션 서버는 SSH 이중 터널을 통해서만 볼 수 있습니다. 닿을 수 있어타겟호스트Ubuntu의 14.04 콘솔을 통해 단순히 명령을 실행 ssh targetHost하고 원격 시스템에서 mysql cli를 실행하는 것보다 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 키 파일: SSH 서버에서 정책을 활성화한 경우 서버 인증을 위한 개인 키가 포함된 파일에는 PasswordAuthentication값이 있습니다 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

설정이 올바르게 되었다면 삭제하지 마세요. 그래서 나는 firewallhostWorkbench에서 연결할 수 있는 호스트라고 가정합니다. 따라서 이 방화벽 뒤의 '실제' mysql 서버에 액세스할 수 있는 개방형 포트를 이 서버에 생성해야 합니다.

.NET에서 영구 SSH 터널을 설정하면 괜찮습니다 firewallhost. 그것은 다음과 같이 이루어집니다firewallhost

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

이렇게 하면 포트 33060(또는 여기에 사용 가능한 포트)에 localhost(모든 nic에서는 공개되지 않음)에 대한 openssh 터널이 생성되며, firewallhost이 터널은 이 터널을 통해 3306 포트(역시 localhost이지만 machine databasehost)로 연결됩니다. 의 someshelluser로 databasehost.

이제 Workbench에 연결할 수 있습니다.

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

  • MySQL 호스트 이름: ( 'localhost' localhost에서 터널을 열었기 때문에 )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

SSH 터널을 생성한 머신에서 '새' 포트를 열어 그러한 SSH 터널이 한 머신에서 다른 머신으로 모든 포트 스트림을 '전송'할 수 있다고 '상상'해야 합니다(여기 firewallhost). 이 작업은 의 공개 NIC에서도 수행할 수 있지만 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

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

업데이트 2:

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

마지막으로:

SSH 호스트 이름은 .ssh/config의 프록시 명령이 'firewallHost'를 통해 'targetHost'로 터널링하는 'targetHost'입니다. SSH 사용자 이름은 'username'입니다(다시 .ssh/config에서 유래).

MySQL 호스트 이름은 localhost 및 포트 3306이어야 합니다. 질문에 작성한 대로 ssh를 통해 'targetHost'에 액세스할 때와 정확히 같아야 합니다. Workbench는 SSH로 연결한 후에(!) 이 값을 사용하기 때문입니다.

관련 정보