SSH 포워딩은 로컬 포트 13306에서 수신하지만 mysql은 여전히 로컬 데이터베이스에 연결합니다. 또는 로컬 소켓이 없다고 보고합니다. Unix에서 localhost를 받은 MySQL 클라이언트는 TCP 대신 Unix 소켓을 선택할 수 있습니다. 포트를 지정한다고 해서 그 선택이 반드시 바뀌지는 않습니다.

이미 승인된 TCP 포워딩이라면 프로토콜을 명시하십시오:

mysql --protocol=TCP --host=127.0.0.1 --port=13306 \
  --user=dbuser --password

사용자 이름은 예시입니다. 비밀번호 옵션은 대화형 입력을 요청합니다. 이 명령은 Unix 소켓 대신 로컬 TCP 리스너에 연결합니다.

두 로그인을 분리해 두십시오

고정 SSH 경로는 이런 형태일 수 있습니다:

ssh -N -L 127.0.0.1:13306:db.internal:3306 [email protected]

게이트웨이의 SSH 서버가 db.internal:3306에 도달합니다. 그런 다음 MySQL은 그 바이트 스트림을 통해 데이터베이스 계정을 인증합니다. 허용된 SSH 키가 데이터베이스 로그인을 부여하지는 않으며, 데이터베이스의 출발지 제한은 연결이 경로의 그쪽에서 오는 것으로 봅니다.

이것은 고정 TCP 어댑터이며 mysql이 사용하는 SOCKS 설정이 아닙니다. 포워딩 엔드포인트에는 미리 정해진 대상이 하나 있으므로 애플리케이션에 SOCKS 협상이 필요하지 않습니다.

사용되는 곳에서는 의도한 데이터베이스 TLS 아이덴티티와 인증서 정책을 유지하십시오. 소켓을 loopback에 연결한다고 해서 데이터베이스 인증서가 다른 서비스 이름에 대해 유효해지지는 않습니다. 성공한 로컬 TCP 연결은 전송 방식 선택을 결정할 뿐, 이후의 데이터베이스 인증이나 TLS 검사를 결정하지 않습니다.

관련 글