Workbench를 사용하여 SSH를 통해 MySQL 데이터베이스에 연결할 수 없음


10

MySQL Workbench가있는 웹 응용 프로그램 서버 중 하나에서 SSH 터널링을 통해 데이터베이스에 연결하려고합니다. 기본 설정은 다음과 같습니다. 보안상의 이유로 스크린 샷에서 일부 값을 변경했습니다.

워크 벤치

문제는 앱 서버 중 하나에서 SSH 터널을 통해 연결할 때마다 다음 오류가 발생한다는 것입니다.

사용자 social_shop_prod와 함께 computer.amazonaws.com의 SSH 터널을 통해 us-east-1.amazonaws.com에 연결하지 못했습니다. 127.0.0.1에서 MySQL 서버에 연결할 수 없습니다.

그러나 다음 명령 줄을 통해 SSH를 통해 동일한 자격 증명을 사용하는 경우 :

mysql -u social_shop_prod -h us-east-1.amazonaws.com -p

성공적으로 연결하고 MySQL 대화식 명령 프롬프트를 얻을 수 있습니다.

여기서 다른 개발 팀과 이야기를 나눈 적이 있지만 우리 중 누구도 Workbench가있는 앱 서버에서 SSH를 통해 터널링 할 수없는 이유를 알 수 없습니다. 그러나 앱 서버 중 하나에 SSH로 연결하고 명령 줄을 통해 MySQL에 연결하면 성공적으로 연결할 수 있습니다.

왜 127.0.0.1 이상을 연결하려고합니까? 구성에서이를 지정하지 않았습니다. 또한 내 호스트 파일이 아래 표시된 도메인을 해당 IP로 리디렉션하지 않습니다.

모든 건설적인 의견을 높이 평가합니다.

답변:


5

SSH 터널을 통해 연결하기 때문에 us-east-1.amazonaws.com의 MySQL 포트 3306이 컴퓨터에서 로컬로 열려 있음을 의미합니다. 컴퓨터의 IP 주소는 127.0.0.1 또는 localhost입니다. us-east-1.amazonaws.com의 mysql 서버에 연결하면 실제로 127.0.0.1, 즉 컴퓨터를 통해 서버에 액세스합니다. 다른 터널이 열려 있거나 MySQL이 컴퓨터에서 로컬로 실행중인 경우 인증 시도를 거부하는 다른 MySQL 서버 일 수 있습니다.

시도해 볼 수있는 몇 가지 테스트가 있습니다.

1. Windows 컴퓨터가 청취하는 포트

명령 프롬프트에서 : netstat -a (열린 모든 포트를 나열)

리눅스에서는 : netstat -tlpn

2. 기본 연결 테스트

DOS 명령 프롬프트 또는 Linux 콘솔에서 : telnet 127.0.0.1 3306

시간이 초과되거나 다른 프로그램이 응답하면 터널이 올바르게 설정되지 않은 것입니다.

3. MySQL Workbench가 로컬로 여는 포트 번호를 변경하십시오

우리는 MySQL 워크 벤치가 컴퓨터에서 터널을 만들고 있다고 가정합니다. 그렇다면 MySQL 워크 벤치에서 9000과 같은 다른 포트 번호를 통해 터널링을 시도하십시오.

netstat -a에서 9000이 열린 포트로 나열되지 않았는지 확인하십시오.

us-east-1.amazonaws.com에 대한 ssh 액세스 권한이있는 경우

4. us-east-1.amazonaws.com에서 MySQL에 연결해보십시오.

mysql -u myuser -h 127.0.0.1 -p

Rolando가 말했듯이 올바른 자격 증명을 사용하고 있는지 확인하고 싶을 것입니다. 예를 들어, myuser@127.0.0.1로 연결하고 호스트가없는 사용자 myuser가있는 경우 user@127.0.0.1을 사용하여 연결할 수 없습니다.


2

127.0.0.1에 접속하는 이유는 터널이 로컬 시스템의 포트를 원격 호스트에 연결하기 때문입니다. 이 메시지는 SSH 연결이 작성되지 않았 음을 나타냅니다.

커맨드 라인에서 이것을 시도하십시오 :

ssh -L 33000:remotehost:3306 user@remotehost

SSH가 전달 포트를 허용하는지 확인하십시오. 전달이 허용되지 않았거나 거부되었다는 메시지가 표시되면 그 이유입니다.

이 문제를 해결하려면 서버 구성을 변경해야합니다. SSH 서버에이 구성을 추가하십시오.

AllowTcpForwarding yes

이 구성을 활성화하기 위해 서버를 다시 시작하는 것을 잊지 마십시오.


그 명령을 조금 설명해 주시겠습니까? 당신은 주소를 묶고 있습니까? mysql 명령과 결합 할 수 있습니까?
Thufir

SSH를 사용하면 터널을 설정할 수 있습니다. 원격 포트를 로컬 포트에 연결합니다. 이 경우 로컬 포트를 원격 MySQL 포트에 연결합니다.
Mei

1

나는이 문제를 거의 2 주 동안 계속 다루었 고 이제는 그것을 설정했습니다. 더 많은 사람들이 시도 할 수 있도록 여기에 게시하겠습니다.

좋아, OpenSSH (Win10 native)와 Workbench 8을 사용하고 있습니다.

단계별 :
1. ssh-add를 사용하여 SSH 호스트 키를 에이전트에 추가하십시오.
2. ssh-keygen을 사용하여 키 페어를 생성하십시오. 필자의 경우 이러한 파일 Users/myUser/.ssh은 설치 구성에 따라 자동으로 이동 합니다.
3. 공개 키를 인증없이 인증 된 키 파일 (필자의 경우 서버 설치 경로 내에 있어야 함 Windows/System32/OpenSSH/.ssh)에 추가하십시오.
4. ssh-add를 사용하여 방금 생성 한 키를 에이전트에 추가하십시오.

위의 단계는 명령 줄 SSH 서버의 구성과 거의 같습니다.이 서버에서 연결을 위해 이미 수행 한 OP가 터미널을 통해 작동하고 있음을 알았습니다. 당신이 변환해야합니다 제외 구성 MySQL의 워크 벤치 (8)로 거의 동일한 일을 할 private_key.pem을 OpenSSH의 형식으로로 이동하기 전에 Users/myUser/.sshOpenSSH_instalation_path/.ssh

  1. PUTTYgen을 사용하여 private_key.pem 을 OpenSSH 형식으로 변환하십시오 .
  2. "OpenSSH authorized_keys에 붙여 넣기위한 공개 키" 필드 복사하십시오 .
  3. 폴더에 공개 키를 저장 User/myUser/.ssh하고OpenSSH_instalation_path/.ssh
  4. PUTTY에서 복사 한 키를 폴더 의 authorized_keys 파일에 붙여 넣습니다 OpenSSH_instalation_path/.ssh.
  5. OpenSSH 형식 키를로 내보내십시오 User/myUser/.ssh.
  6. sshd 및 mysql 서비스를 다시 시작하십시오.
  7. 변환 된 개인 키를 사용하여 SSH 서버에 연결하도록 워크 벤치를 구성하십시오.

업데이트 : sshd_config 파일에서 다음을 설정해야합니다.

에서 PermitRootLogin없이 비밀번호
PubkeyAuthentication 예
한 PasswordAuthentication없는
PermitEmptyPasswords없는
AllowTcpForwarding 예

읽어주세요:

저는 경험이 부족한 분석가이므로 고급 사용자가 두 개의 .ssh 폴더 중 어느 폴더가 올바른지 알고 있다면 알려주십시오. OpenSSH가 이것에 대해 모호하다는 것을 알았습니다.
이것은 localhost 만 사용하여 로컬 개발 환경을 설정하는 동안 저에게 효과적이었습니다. 학습 목적으로 만 사용하십시오.
연결을 테스트하기 전에 myUser @ localhost를 MySQL Workbench 사용자에게 추가 할 수 있습니다.
정말로 필요한 경우 이미지를 추가 할 수 있습니다.


0

내 경우에는 문제가 로컬 호스트 호스트 대신 유효한 도메인 이름 또는 IP로 다시 전환 해야하는 문제가 해결되었습니다.

사용자 정의 호스트 확인 실패 ( /etc/hosts)

로컬 호스트 확인 메커니즘을 사용하여 다음을 정의했습니다.

#.#.#.#    my-vm

몇 가지 이유 MySQL 5.2.47Linux Mint 14 (Nadia)있는 유사하다 작업 해결 메커니즘하지 않습니다 .Ubuntu 12.10 (Quantal)

해결책

간단히 퍼블릭 도메인 이름으로 전환 등의 my-website.com문제를 해결한다.


@ 매트 수정, thanj = ks
Édouard Lopez


0

비슷한 문제가 있었지만 이것은 명백하지 않지만 AWS에서 방화벽 규칙을 확인하십시오. 외부에서 연결을 제한하기 위해 IP 범위가 설정되어 있습니다. 사무실의 IP가 변경되어 IP 범위를 벗어났습니다. 다른 사무실의 동료도 여전히 연결할 수 있으므로 문제는 내 PC에 있다고 생각했지만 AWS의 방화벽 규칙에 문제가있는 것입니다. 누군가를 돕는 희망 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.