При попытке подключиться к удаленному серверу mysql через туннель ssh с использованием datagrip в Windows 10 в качестве клиента я получаю сообщение «Ошибка создания туннеля SSH: ошибка открытия».
Я могу успешно установить и подключиться к туннелю с помощью: ssh имя пользователя @ mysqlServer -L 22: удаленный хост: 3306
.
Я использую datagrip в качестве основной демонстрации проблемы, потому что он предоставляет некоторую отладочную информацию при тестировании соединения, но я пробовал dbeaver и tableplus, оба не смогли подключиться.
Другие пользователи в моей организации могут прекрасно подключаться к удаленному серверу mysql на компьютерах Macos.
Логи из датагрипа:
2022-04-18 14:58:14,313 [ 57564] INFO - n.s.s.t.r.JCERandom - Создание нового SecureRandom.
2022-04-18 14:58:14,411 [ 57662] ИНФОРМАЦИЯ — #c.i.s.i.s.sshj — Строка идентификатора клиента: SSH-2.0-IntelliJ__DataGrip_DB-221.5080.224__SSHJ_0.32.0_idea2
2022-04-18 14:58:14,508 [ 57759] ИНФОРМАЦИЯ — #c.i.s.i.s.sshj — Строка идентификатора сервера: SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8
2022-04-18 14:58:15,258 [ 58509] ИНФОРМАЦИЯ - #c.i.s.i.s.sshj - Журнал аутентификации: SSH-подключение к username@mysqlServer:22
* С измененными настройками подключения:
- authMethods: PublicKey(privateKeys=[C:\Users\spenc\.ssh\id_rsa, C:\Users\spenc\.ssh\id_dsa, C:\Users\spenc\.ssh\id_ecdsa, C:\Users\spenc \.ssh\id_ed25519, C:\Users\spenc\.ssh\id_xmss], агент=НЕТ), пароль, KeyboardInteractive
- пользователь: имя пользователя
* Подключено: сокет [адрес = mysqlServer/mysqlServer, порт = 22, локальный порт = 63766]
* Запуск аутентификации
=> нет (ошибка, новые методы аутентификации, разрешенные сервером: открытый ключ)
=> открытый ключ C:\Users\spenc\.ssh\id_rsa (успешно)
2022-04-18 14:58:15,270 [ 58521] ИНФОРМАЦИЯ - #c.i.d.d.DatabaseSshTunnelEstablisher - создан туннель SSH: 63768:remoteHost:3306
2022-04-18 14:58:15,317 [ 58568] ИНФОРМАЦИЯ - #c.i.e.r.RemoteProcessSupport - "C:\Program Files\JetBrains\DataGrip 2022.1.1\jbr\bin\java" -Djava.rmi.server.hostname=127.0. 0.1 -Duser.timezone=UTC -Xmx750m -Xms128m -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\DataGrip 2022.1.1\lib\util_rt.jar;C:\Program Files\JetBrains\DataGrip 2022.1.1\lib\util.jar;C:\Program Files\JetBrains\DataGrip 2022.1.1\lib\groovy.jar;C:\Program Files\JetBrains\DataGrip 2022.1.1\plugins\DatabaseTools\lib\jdbc- console.jar;C:\Users\spenc\AppData\Roaming\JetBrains\DataGrip2022.1\jdbc-drivers\MySQL ConnectorJ\8.0.25\mysql-connector-java-8.0.25.jar" com.intellij.database. remote.RemoteJdbcServer com.mysql.cj.jdbc.Driver
2022-04-18 14:58:15,705 [ 58956] ИНФОРМАЦИЯ — #c.i.e.r.RemoteProcessSupport — порт/порт служб/идентификатор: 58696/63770/RemoteDriverImpld6de775c
2022-04-18 14:58:15,713 [ 58964] ИНФОРМАЦИЯ - #c.i.e.r.RemoteProcessSupport -
2022-04-18 14:58:15,772 [ 59023] ИНФОРМАЦИЯ — #c.i.d.d.DatabaseConnectionEstablisher — подключение к: jdbc:mysql://remoteHost:3306/dbName
2022-04-18 14:58:15,774 [ 59025] ИНФОРМАЦИЯ — #c.i.d.d.DatabaseConnectionEstablisher — Поставщик аутентификации: пароль пользователя
2022-04-18 14:58:15,776 [ 59027] ИНФОРМАЦИЯ - #c.i.d.d.DatabaseCredentialsAuthProvider - Подключение как: имя пользователя
2022-04-18 14:58:15,778 [ 59029] ИНФОРМАЦИЯ — #c.i.d.d.DatabaseConnectionEstablisher — подключение к (переписано): jdbc:mysql://localhost:63768/dbName
2022-04-18 14:58:15,987 [ 59238] ПРЕДУПРЕЖДЕНИЕ - #c.i.s.i.s.sshj - <<chan # 0 / open >> проснулся: открытие канала `direct-tcpip` не удалось: открытие не удалось
2022-04-18 14:58:15,989 [ 59240] ИНФОРМАЦИЯ - #c.i.s.i.s.sshj - Ошибка в локальном туннеле SSHJ для SshjSshConnection(username@mysqlServer)@82260ee: Локальный клиент /127.0.0.1:63774 ==> Локальный сервер localhost: 63768 ==> Удаленный сервер remoteHost:3306`: net.schmizz.sshj.connection.channel.OpenFailException: ошибка открытия
2022-04-18 14:58:16,016 [ 59267] ПРЕДУПРЕЖДЕНИЕ - #c.i.d.d.BaseDatabaseErrorHandler$IOErrorInfo - Невозможно прочитать ответ от сервера. Ожидается чтение 4 байтов, чтение 0 байтов перед неожиданной потерей соединения.
java.io.EOFException: невозможно прочитать ответ с сервера. Ожидается чтение 4 байтов, чтение 0 байтов перед неожиданной потерей соединения.
в com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67)
в com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63)
в com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45)
в com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:540)
в com.mysql.cj.protocol.a.NativeProtocol.readServerCapabilities(NativeProtocol.java:498)
в com.mysql.cj.protocol.a.NativeProtocol.beforeHandshake(NativeProtocol.java:385)
в com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1351)
в com.mysql.cj.NativeSession.connect(NativeSession.java:157)
в com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:953)
в com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:823)
в com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:453)
в com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
в com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
на com.intellij.database.remote.jdbc.helpers.JdbcHelperImpl.connect(JdbcHelperImpl.java:639)
на com.intellij.database.remote.jdbc.helpers.MysqlBaseJdbcHelper.connect(MysqlBaseJdbcHelper.java:244)
на com.intellij.database.remote.jdbc.impl.RemoteDriverImpl.connect(RemoteDriverImpl.java:55)
в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод)
в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
в java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
в java.base/java.lang.reflect.Method.invoke(Method.java:566)
на java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
на java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
на java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
в java.base/java.security.AccessController.doPrivileged (собственный метод)
на java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
на java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
в java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
в java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
в java.base/java.security.AccessController.doPrivileged (собственный метод)
на java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
в java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
в java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
на java.base/java.lang.Thread.run(Thread.java:829)
Подавлено: com.intellij.database.util.AsyncTask$Frame$FrameData: Данные асинхронного кадра: Тестовое соединение -> Подготовить подключение -> Установить подключение к базе данных -> Получить учетные данные базы данных -> Выполнить подключение к базе данных
2022-04-18 14:58:16,019 [ 59270] ИНФОРМАЦИЯ — #c.i.e.r.RemoteProcessSupport — завершение: 127.0.0.1:58696/RemoteDriverImpld6de775c
2022-04-18 14:58:16,054 [ 59305] ИНФОРМАЦИЯ - #c.i.e.r.RemoteProcessSupport - Процесс завершен с кодом выхода -1
Обновление: я попробовал «MySQL Workbench» для Windows, и это сразу же таинственным образом сработало. Я попробовал другие клиенты еще раз, и ни один из них не подключился. Я не добавляю это как ответ, так как это просто обходной путь, который не решает и не освещает исходную проблему.