얼마전에 내 서버의 OpenSSH 업데이트를 한 이후부터 MySQL Workbench로 서버의 MySQL에 SSH을 통한 연결이 되지 않았다. 사실 딱히 쓸일이 없어서 내버려두고 있었는데, 다시 블로그를 시작하려 이것 저것 설정하다가 이참에 이 문제도 해결해보았다.

문제점

이 문제는 MySQL Workbench 6.2.4에서 Connection Method를 Standard TCP/IP over SSH로 설정하여 MySQL 서버에 SSH를 통하여 접속하려고 할 때 발생하였다. “Could not connect the SSH Tunnel” 라고 에러창이 떴고, 로그를 보면 다음과 같은 형태의 에러가 기록되어있었다.

[ERR][sshtunnel.py:notify_exception_error:233]: Traceback (most recent call last):
 File "D:\Program Files\MySQL\MySQL Workbench 6.2 CE\sshtunnel.py", line 265, in _connect_ssh
 look_for_keys=has_key, allow_agent=has_key)
 File "D:\Program Files\MySQL\MySQL Workbench 6.2 CE/python/site-packages\paramiko\client.py", line 301, in connect
 t.start_client()
 File "D:\Program Files\MySQL\MySQL Workbench 6.2 CE/python/site-packages\paramiko\transport.py", line 461, in start_client
 raise e
SSHException: Incompatible ssh peer (no acceptable kex algorithm)

이 에러에 대해 검색해보면 이와 똑같은 에러가 리포트 되어있다. 이 문제는 최신버전의 OpenSSH에서 ECDH 키교환 알고리즘을 사용하면서 생기는듯 하다고 한다. Workbench는 내부적으로 paramiko라는 Python 기반의 SSH 라이브러리를 사용하고 있는데, 이게 옛날 버전에서는 ECDH를 지원하지 않아 업데이트를 해주어야 한다.

차후에 나오는 버전에서는 이 문제가 해결될지는 모르겠으나, 같은 문제가 발생한다면 아래의 방법으로 해결할 수 있을 것이다.

해결 방법

앞서 링크했었던 리포트의 마지막 댓글에 해결 방법이 제시되어있다. paramiko 1.15.1부터 ECDH를 지원하므로 최신 버전으로 받아 넣어주고, 이 라이브러리가 내부적으로 ecdsa 라이브러리도 사용하기 때문에 이도 최신 버전으로 설치한다. 그리고 wb_admin_ssh.py만 조금 수정해주면 된다. 다만 Windows에서의 paramiko의 경로는 “(MySQL Workbench 설치 경로)\python\site-packages\paramiko” 이다. 또, ecdsa 라이브러리도 똑같이 site-packages에 넣어주면 된다. 그리고 wb_admin_ssh.py의 경로는 “(MySQL Workbench 경로)\modules\”이다. 이 파일을 수정하는게 귀찮으므로 수정한 내용을 첨부해두었다.

정리

  1. paramiko의 최신 버전을 받아  “(Workbench 경로)\python\site-packages\paramiko”에 넣는다. (기존 폴더 삭제해도 무방)
  2. ecdsa의 최신 버전을 받아 “(Workbench 경로)\python\site-packages\ecdsa”에 넣는다.
  3. 패치 내용대로 “(Workbench 경로)\modules\wb_admin_ssh.py”를 수정한다. (또는 첨부파일로 덮어쓰면 된다.)

참조

http://bugs.mysql.com/bug.php?id=74658

첨부

wb_admin_ssh.py

MySQL Workbench 6.2.4 SSH 연결 문제
태그:     

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다