SSH를 통한 TCP / IP와 함께 MySQL Workbench를 사용하려고 시도-연결 실패


41

PC의 MySQL Workbench에서 SSH 연결을 통한 TCP / IP를 사용하여 연결할 수 없습니다. 무슨 일이야?

우분투 서버 mysql.myhost.com 에서 MySQL 5.1 데이터베이스를 만들었습니다 . 로컬로 액세스 할 수 있습니다. MySQL Workbench (PC)는 TCP over ssh를 통한 연결을 제공합니다. 커맨드 라인 mysql이 잘 작동하는 원격 서버의 포트 3306에서 실행됩니다.

다음 세션 세부 정보를 사용했습니다.

  • 연결 방법 : SSH를 통한 TCP / IP.
  • SSH 호스트 이름 : mysql.myhost.com : 3306
  • SSH 사용자 이름 : 내 리눅스 로그인
  • SSH 공개 키 파일 : 로컬 공개 키 파일
  • MySQL 호스트 이름 : 127.0.0.1 MySQL
  • 서버 포트 : 3306
  • 사용자 이름 : root

연결하려고하면 "사용자 루트로 mysql.myhost.com의 SSH 터널을 통해 127.0.0.1:3306에서 MySQL에 연결하지 못했습니다"라는 오류 메시지가 나타납니다.

" '127.0.0.1'에서 MySQL 서버에 연결할 수 없습니다 (10061)"

또 다른 테스트-Putty를 사용하여 포트 3306으로 SSH 터널을 설정하고 위에서 설명한대로 로컬 3306에 대한 연결을 원격 서버로 전달하는 터널을 통해 MySQL Workbench를 사용하여 OK에 연결할 수 있습니다. 그러나 Workbench에서 "SHTP를 통한 TCP / IP"를 얻을 수 없습니다.

보조 질문 : Workbench가 "SSH 공개 키 파일 경로"를 요청할 때 실제로 내 개인 키 파일이 필요하지 않습니까?


4
맙소사. bugs.mysql.com/bug.php?id=61368 은 OpenSSH 형식으로 필요한 개인 키 파일임을 보여줍니다. 나는 그것에 대해 궁금했지만 확실하지 않았다.
Dizzley 2016 년

답변:


29

나는이 오류가 발생했을 때이 질문에 걸려 들었습니다. 마침내 구성을 알아낼 수있었습니다.

  1. bind_address = 127.0.0.1이있는 /etc/mysql/my.cnf의 아무것도 만지지 않았습니다. 따라서 로컬 호스트 만 연결할 수 있습니다.
  2. OpenSSH 서버를 사용합니다. 따라서 구성 파일 / etc / ssh / sshd_config에서 TCP 전달을 담당하는 매개 변수 를 no 에서 yes로 변경 했기 때문에 AllowTcpForwarding yes 입니다.
  3. 마지막으로 MySQL WorkBench에 다음을 입력했습니다.

    • SSH 호스트 이름 : 192.168.0.8:22(SSH 서버가 포트 22를 수신함)
    • SSH 사용자 이름 : sshuser
    • SSH 키 파일 : * C : \ Users \ windowsuser \ .ssh \ id_rsa * (공개라고해도 개인 키 여야 함)
    • MySQL 호스트 이름 : 127.0.0.1 (기본적으로 MySQL 서버는 내가 변경하지 않은 로컬 호스트에만 바인딩되므로 변경해서는 안 됨)
    • MySQL 서버 포트 : 3306 (기본)
    • 사용자 이름 : root

유일하게 남아있는 것은 비밀번호가 아닌 키를 사용하도록 SSH 서버를 올바르게 구성하는 것입니다. 이것이 누군가를 도울 수 있기를 바랍니다.


서버 측에서해야 할 한 가지는 / etc / ssh / sshd_config가이 줄인지 확인 AuthorizedKeysFile /home/root/.ssh/authorized_keys하는 것입니다. certified_keys에 내 PUBLIC 키가 항목으로 포함되어 있는지 확인하십시오 .
RyanNerd

2 단계 AllowTcpForwarding yes원격 서버 ( 예 : 연결하려는 MySQL 인스턴스가있는 호스트 )에 적용 되는지 확인하십시오 . 또는 MySQL Workbench가 설치된 로컬 머신
Nam G VU

@NamGVU 2 단계는 MySQL이 설치된 원격 서버에 적용됩니다. 특히 SSH를 통해 MySQL에 터널링을 제공하는 OpenSSH 서버에 특히 적합합니다.

나는 시도했지만 여전히 터널을 통과하지 못했습니다. MySQL Workbench는 로그 파일에서 더 자세한 오류 정보를 읽도록 지시합니다. 어디를 읽을 수 있는지 알고 싶습니까?
Nam G VU

1
오늘 작업했습니다. AllowTcpForwarding항목 을 구성한 후 재부팅해야합니다.
Nam G VU

8

TCP / IP over SSH 접근 방식은 MySQL 연결을 기반으로 한 "일반적인"SSH 연결을 설정하여 작동한다고 생각합니다 ( -LOpenSSH 명령 줄 클라이언트를 사용하여 터널링하는 것과 같은 방식 ).

따라서 터널을 설정할 서버의 SSH 서버에 대한 연결을 지정해야합니다. 여기서는 mysql.myhost.com:3306포트 3306 에서이 SSH 서버 (MySQL이 아닌)를 실행하고 있음을 의미하는을 사용 하는 것 같습니다 .

127.0.0.1:3306의 MySQL 서버와 외부 IP 주소의 SSH 서버 mysql.myhost.com를 포트 3306에 바인딩 할 수는 있지만 그럴 가능성은 거의 없습니다. SSH 서버가 포트 22 (기본값)에서 수신 대기하는 것 같습니다.

아마을 사용해야 mysql.myhost.com:22합니다. 퍼티와 같은 일반 SSH 클라이언트를 통해 연결할 수 있는지 확인하십시오.


8

mysql.user 테이블에서 사용자를 확인해야 할 수도 있습니다.

이 쿼리를 실행하십시오.

SELECT user,host FROM mysql.user;

다음과 같이 보일 것입니다 :

mysql> SELECT user,host,password FROM mysql.user;
+------------------+-------------+-------------------------------------------+
| user             | host        | password                                  |
+------------------+-------------+-------------------------------------------+
| root             | localhost   | *7A670E02260CDEEFF062DD08F3A6F6DA079998CB |
| ping             | %           | *124E1DB56CC8D6E2FEE8315BB2544BF04B980DB6 |
| admin            | 10.67.135.% | 1a6858054a41fede                          |
| icorbin          | 10.67.135.% | 366ed93a7396650e                          |
+------------------+-------------+-------------------------------------------+
4 rows in set (0.00 sec)

유의하시기 바랍니다

  • root @ localhost는 localhost에서만 로그인 할 수 있습니다.
  • ping @ '%'는 TCP / IP를 통해 로그인 할 수 있습니다
  • admin@10.67.135.%는 해당 넷 블록에서만 TCP / IP를 통해 로그인 할 수 있습니다
  • icorbin@10.67.135.%는 해당 넷 블록에서만 TCP / IP를 통해 로그인 할 수 있습니다

TCP / IP를 통해 루트를 연결하려면 루트 사용자의 IP 주소 또는 넷 블록을 지정해야합니다.

이 같은:

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'whateverpassword';

또는 루트 비밀번호가 root @ localhost와 동일한 경우

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY PASSWORD '*7A670E02260CDEEFF062DD08F3A6F6DA079998CB ';

주의 사항 : root @ '%'는 일반적으로 권장되지 않습니다. root@'10.% '또는 root에 대한 다른 넷 블록을 사용해보십시오.

시도 해봐 !!!


3
...@localhostMySQL 서버에 관한 한 터널의 끝에서 연결이 이루어지기 때문에 SSH 터널을 통해 작동 하지 않아야 합니까?
Bruno

@Bruno : 알아야 할 확실한 방법 중 하나는 성공적으로 연결 한 다음 SELECT USER (), CURRENT_USER ();를 실행하는 것입니다. 출력 내용을 확인하십시오. USER () 함수는 인증하려고 시도한 것을 에코하는 반면 CURRENT_USER ()는 MySQL이 인증 할 수있는 것을 에코합니다. CURRENT_USER ()가 root @ localhost를 에코하면 질문에 대한 대답은 예입니다.
RolandoMySQLDBA



2

내 문제는 ed25519SSH 키 를 사용하려고했기 때문에 발생했습니다 . SSH 서버 에서이 오류를 발견했습니다 auth.log.

sshd[25251]: Connection closed by 192.168.x.x [preauth]

RSA 키를 사용하도록 전환하면 모든 것이 예상대로 작동했습니다.


1

ssh를 통해 서버에 연결하려고하지만 mysql 포트를 사용하고 있습니다. 원하는 포트는 ssh 서버가 청취하는 모든 것, 일반적으로 22, 로컬 호스트 및 3306 mysql 호스트 이름 및 포트입니다.


1

나는 같은 문제에 직면했다. AllowTcpForwarding Yes 를 확인하고 설정하려고 시도했지만 sshd_config에서 누락되었으므로 도움이되지 않습니다. ssh 호스트 이름이 mysql 호스트 이름과 동일 하지 않은지 확인하십시오 (localhost 사용).

워크 벤치에서 +를 선택하여 새 연결을 추가하고 다음을 설정하십시오.

  • 연결 방법 : SSH를 통한 표준 TCP / IP
  • SSH 호스트 이름 : 192.168.0.50:22 (원격 SSH 서버 IP 및 포트 배치 (선택 사항))
  • SSH 사용자 이름 : sshuser
  • 프롬프트에서 비밀번호를 설정하거나 추가 할 수 있습니다
  • MYSQL 호스트 이름 : localhost 또는 127.0.0.1
  • MYSQL 서버 포트 : 3306
  • 프롬프트에서 비밀번호를 설정하거나 추가 할 수 있습니다

연결을 테스트하십시오. 성공하면 OK.Viola!를 누르십시오.


1

때로는 PuTTY에서 만든 키가 작동하지 않습니다. Linux 상자에서 ssh-keygen을 사용하여 키 페어를 만듭니다. 새 id_rsa 의 내용 을 Windows의 텍스트 파일로 복사하십시오 . id_rsa.pub의 내용을 Linux 상자의 certified_keys에 추가하십시오. Workbench의 다른 모든 기본값은 MySQL 호스트 이름의 127.0.0.1을 포함하여 괜찮습니다. 물론 SSH를 통한 표준 TCP / IP 여야합니다.


1

나는 같은 오류를 냈다. 문제는 타임 아웃의 "약간"입니다. 나는 도움이되지 않은 120 초까지도 값을 올렸다.

내 경우에는 nslookup myserver.com을 수행하고 호스트 이름 대신 IP 주소를 사용하여 해결할 수 있습니다. 내 가정은 IPv4에서 IPv6으로 연결하는 데 문제가 있습니다.


0

MySQL 버전 5.5.29 및 MySQL Workbench 5.2.40을 실행하는 서버에 연결하는 Ubuntu 시스템에서 이와 동일한 문제가 발생했습니다. SSH 서버는 ssh 키를 사용해야합니다.

루트 사용자를 사용하여 MySQL 서버에 연결할 수 없었으며 대신 로그인에 사용할 별도의 루트가 아닌 사용자를 만들어야했습니다. 그 후 나는 단지 잘 연결할 수있었습니다.

도움이 되었기를 바랍니다.


0

좋아, 나는 이것이 오래된 질문이라는 것을 알고 있지만 몇 시간 동안 내 머리카락을 뽑았다. Bruno와 Eye가 언급 한 모든 것을 확인했으며 모두 좋아 보였습니다. 그런 다음 그것이 실제로 개인 / 공개 키라는 것을 깨달았습니다. 그래서 Pageant를 시작하고 개인 키를 추가하여 MySQL Workbench가 읽고 연결할 수있는 공개 키를 만들었습니다! (MySQL Workbench가 실제로 작업을 시작했을 때 실제로는 일종의 제정 술 이었지만 행복한 방식이었습니다.)

TLDR : Pageant를 사용하여 개인 키에서 공개 키를 생성하십시오.


개인 키는 공개 키로 사용해서는 안되므로 개인 키가 아닙니다.
James Anderson

@JamesAnderson 그게 버그 가 아니야 ? 텍스트는 비공개를 요구하고 있으며 적어도 버그 링크에 따르면 공개로 표시되어야합니다. 아님?
Thufir

-1

내가 찾은 것 만 ... 종종 서버에 로그인하지 않고 파일을 만들 수 없도록 쉘 (예 : / sbin / nologin)없이 SSH 서버에서 사용자를 만들고 있습니다 ... (생산 시스템의 경우 방화벽에서하고 있습니다).

이후 일반 Linux 환경에서는 다음과 같은 포트를 계속 전달할 수 있습니다.

ssh -Nf -L 3306:%mysql_ip%:%mysql_port% %ssh_host%

그런 다음 로컬 워크 스테이션에서 다음과 같이 연결하십시오.

mysql -h localhost:3306 -u %mysql_user% -p

그러나 Workbench는 MySQL에 연결할 수 없다는 오류를 표시합니다 ... 해당 사용자의 쉘을 / bin / bash로 변경하면 모든 것이 잘 작동합니다.

Workbench가 원격 SSH 서버에서 로컬 쉘을 요구하는 이유를 모르겠습니다.


-1

mysql 워크 벤치에 맞는 형식으로 새 RSA 키를 작성하십시오.

예를 들면 다음과 같습니다.

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.