Вообще то к базе нужен доступ из С#, но проблема не в этом, а в настройках сервера. Пример на С# работает почти аналогично.
Итак, для теста есть домашний никсный сервер. На нём есть root/admin пользователь и dbUser, который состоит в группе администраторов. Также есть root и dbUser как пользователи MySQL (Вообщето на сервере стоит MariaDB, но говорят что это одно и тоже)
На виндовс клиенте берем HeidiSQL с MySQL(SSH Tunnel).
Вариант 1. Для создания туннеля пользуем admin, для базы root или dbUser — всё работает
Вариант 2. Для создания туннеля пользуем dbUser, для базы также dbUser или root — не работает
Если заходить через SSH терминал как dbUser, а затем запускать MySQL через командную строку как dbUser, то доступ к базе есть.
Что еще проверять не знаю, с никсами почти не работаю, как и с администрированием MySQL.
Куда копать и что можно еще проверить? Каких привилегий может не хватать dbUser?
Здравствуйте, AlexNek, Вы писали:
AN> Куда копать и что можно еще проверить? Каких привилегий может не хватать dbUser?
Покажи как точно ты запускаешь консоль MySQL и параметры соединения при тунелировании, а так же какую ошибку выдает MySQL, когда "не работает"? Так же вывод запросов:
SELECT `user`, `host` FROM `mysql`.`user`;
SELECT `user`, `host`, `db` FROM `mysql`.`db`;
Здравствуйте, Anton Batenev, Вы писали: AB>Здравствуйте, AlexNek, Вы писали: AN>> Куда копать и что можно еще проверить? Каких привилегий может не хватать dbUser? AB>Покажи как точно ты запускаешь консоль MySQL и параметры соединения при тунелировании, а так же какую ошибку выдает MySQL, когда "не работает"? Так же вывод запросов:
Вариант когда всё работает
Вариант когда не работает
Ошибка, тоже самое выдает стандартный драйвер. DevArt выдает, что получено мало данных
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, AlexNek, Вы писали:
AN>> Куда копать и что можно еще проверить? Каких привилегий может не хватать dbUser?
AB>Покажи как точно ты запускаешь консоль MySQL
mysql -p DBUser
пароль
Могу попробовать вариант без пароля он тоже был и тоже не работал.
Но нужно иметь в виду что машинка пережила несколько обновлений системы, после которых многие вещи пришлось восстанавливать.
Вначале они пути все обнулили, потом начали увеличивать уровни безопасности: запретили логин руту, повыкидали всё что не принадлежит системе, запретили абсолютные пути к изображениям и прочее что еще не нашёл.
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, AlexNek, Вы писали:
AN>> AB>Покажи как точно ты запускаешь консоль MySQL AN>> mysql -p DBUser AN>> пароль
AB>
AB>mysql -u DBUser -p <имя_базы>
AB>
AB>То, как ты написал — это соединение с базой DBUser.
Сорри, написал, как помнил, не сверялся с записями. Вот из-за этого и не люблю Никсы, что нужно постоянно куда-то смотреть. Каждый раз когда нужно VI закрыть приходится гуглу спрашивать.
Ну отчего на второй ESC не спросить пользователя что надо.
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, AlexNek, Вы писали:
AN>> Ошибка, тоже самое выдает стандартный драйвер. DevArt выдает, что получено мало данных
AB>Так, а ты точно с ним соединяешься во втором случае? Проходит ли установка соединения через
Через Heidi такой финт не пройдёт сделал SSH сессию на C#
mysql --user=DBUser --password=xxxx mantis
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1552
Server version: 5.5.47-MariaDB Source distribution
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [mantis]>
MariaDB [mantis]>
SHOW GRANTS FOR 'DBUser'@'127.0.0.1';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for DBUser@127.0.0.1 |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'DBUser'@'127.0.0.1' IDENTIFIED BY PASSWORD 'yyyyy' WITH GRANT OPTION |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mantis`.* TO 'DBUser'@'127.0.0.1' |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [mantis]>
Devart.Common.w occurred
_HResult=-2146233088
_message=Read less bytes than expected. Probably the connection was forcefully closed by the remote server.
HResult=-2146233088
IsTransient=false
Message=Read less bytes than expected. Probably the connection was forcefully closed by the remote server.
Source=Devart.Data.MySql
StackTrace:
at Devart.Common.q.c(Byte[] A_0, Int32 A_1, Int32 A_2)
InnerException:
Здравствуйте, AlexNek, Вы писали:
AN>Вообще то к базе нужен доступ из С#, но проблема не в этом, а в настройках сервера. Пример на С# работает почти аналогично.
Еще одну интересную особенность нашел. В либе SSH есть класс для перенаправления портов "ForwardedPortLocal"
И когда в параметрах пишешь "localhost" используется соединение по IPV6 (::1), а когда "127.0.0.1" то IPV4
При этом во втором случае DevArt драйвер генерирует
System.Net.Sockets.SocketException occurred
_HResult=-2147467259
_message=No connection could be made because the target machine actively refused it
HResult=-2147467259
IsTransient=false
Message=No connection could be made because the target machine actively refused it 127.0.0.1:3306
Source=System
ErrorCode=10061
NativeErrorCode=10061
но игнорирует его и соединение происходит, а оригинальный драйвер на этом и обрывается.
В первом случае DevArt соединяется без никаких исключений, а оригинальный драйвер IPV6 видимо не понимает
Также порт форвардинг показывает результат (там есть эвент RequestReceived) для IPV6, но не для IPV4
Не могу только понять отчего оригинальный драйвер начинает работать, когда активна терминальная root сессия PUTTY с сервером. И при активной сессии PUTTY второй пользователь также может работать с базой.
Получается что PUTTY открывает какой то канал. Или ошибка в системе, когда второй туннель получает привилегии первого.
Однако если PUTTY соединяется с сервером как dbUser, то опять валят ошибки
System.IO.EndOfStreamException occurred
_HResult=-2147024858
_message=Attempted to read past the end of the stream.
HResult=-2147024858
IsTransient=false
Message=Attempted to read past the end of the stream.
Source=MySql.Data
StackTrace:
at MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count)
InnerException:
Здравствуйте, AlexNek, Вы писали:
AN> Через Heidi такой финт не пройдёт сделал SSH сессию на C#
Честно говоря, я уже запутался что и как работает, а что нет. А названия программ мне абсолютно ни о чем не говорят — в линуксе все как-то на много проще. Ты можешь убедиться, что не работает именно серверная часть сделав проброс порта из линукса? Скажем, взять какой-нибудь TurnKey MySQL Live CD, загрузиться с него, дальше в консоли:
$ ssh -L 3307:127.0.0.1:3306 your.server.com
В соседнем терминале (переключаются обычно по CTRL + ALT + F1,F2,etc)
$ mysql -u your_user -p -P 3307 -h 127.0.0.1 your_database
Если соединение проходит успешно, то проблема не на серверной стороне. Если нет, то копируем ошибку и смотрим дальше.
P.S. Вместо реальной загрузки с LiveCD можно загрузиться в VirtualBox или любую систему виртуализации, которая способна грузиться с ISO.
On 12.05.2016 20:20, AlexNek wrote:
> Но нужно иметь в виду что машинка пережила несколько обновлений системы, > после которых многие вещи пришлось восстанавливать. > Вначале они пути все обнулили, потом начали увеличивать уровни > безопасности: запретили логин руту, повыкидали всё что не принадлежит > системе, запретили абсолютные пути к изображениям и прочее что еще не нашёл.
Может dbUser-у просто запрещён порт форвардинг в конфиге ssh сервера?
Точнее, может быть он разрешён admin или какой-то группе, куда он
входит, а остальным запрещён.
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, AlexNek, Вы писали:
AN>> Через Heidi такой финт не пройдёт сделал SSH сессию на C#
AB>Честно говоря, я уже запутался что и как работает, а что нет.
Под ssh сессии с админом работает все
Под ssh сессим в dbUser не работает
С открытой ssh сессии с админом из по винды работает. AB>А названия программ мне абсолютно ни о чем не говорят — в линуксе все как-то на много проще.
Кому как. Я вот раз 5 пытался вслепую пароль набрать — он же гад вообще ничего не показывает
Putty — SSH терминал под виндой, один раз всё набрал и потом только двойной клик мышой
Ты можешь убедиться, что не работает именно серверная часть сделав проброс порта из линукса? Скажем, взять какой-нибудь TurnKey MySQL Live CD, загрузиться с него, дальше в консоли:
AB>
С горем пополам зашел, нужно набирать admin@your.server.com — root то запрещен
AB>В соседнем терминале (переключаются обычно по CTRL + ALT + F1,F2,etc)
Это совсем не понимаю, у меня на винде по этому ноткею оказывается отключается второй монитор. Захожу из виртуалки турнкея.
Может просто в этой сессии набирать вторую команду?
PS:После этих экспериментов вообще перестало всё работать
bind: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 3307
Could not request local forwarding.
Здравствуйте, hrensgory, Вы писали:
H>Может dbUser-у просто запрещён порт форвардинг в конфиге ssh сервера?
H>Точнее, может быть он разрешён admin или какой-то группе, куда он H>входит, а остальным запрещён.
А как это проверить?
13.05.2016 22:12, AlexNek пишет:
> H>Может dbUser-у просто запрещён порт форвардинг в конфиге ssh сервера? > > H>Точнее, может быть он разрешён admin или какой-то группе, куда он > H>входит, а остальным запрещён. > А как это проверить?
Заглянуть в /etc/ssh/sshd_config или как его там на linux сервере.
Здравствуйте, hrensgory, Вы писали:
H>13.05.2016 22:12, AlexNek пишет:
>> H>Может dbUser-у просто запрещён порт форвардинг в конфиге ssh сервера? >> >> H>Точнее, может быть он разрешён admin или какой-то группе, куда он >> H>входит, а остальным запрещён. >> А как это проверить?
H>Заглянуть в /etc/ssh/sshd_config или как его там на linux сервере.
Спасибо, уже нашел и добавил,но никаких изменений
Match User dbUser
AllowTcpForwarding yes
a known_hosts для пользователей имеет значение? Там только имя моего виртуального домена
В логах удалось найти только это
sshd[17374]: pam_unix(sshd:session): session opened for user dbUser by (uid=0)
sshd[17374]: error: mm_request_receive: socket closed
sshd[17374]: pam_unix(sshd:session): session closed for user dbUser
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, AlexNek, Вы писали:
AN>> Через Heidi такой финт не пройдёт сделал SSH сессию на C#
AB>Честно говоря, я уже запутался что и как работает, а что нет. А названия программ мне абсолютно ни о чем не говорят — в линуксе все как-то на много проще. Ты можешь убедиться, что не работает именно серверная часть сделав проброс порта из линукса? Скажем, взять какой-нибудь TurnKey MySQL Live CD, загрузиться с него, дальше в консоли:
AB>
AB>Если соединение проходит успешно, то проблема не на серверной стороне. Если нет, то копируем ошибку и смотрим дальше.
AB>P.S. Вместо реальной загрузки с LiveCD можно загрузиться в VirtualBox или любую систему виртуализации, которая способна грузиться с ISO.
С СД всё замечательно получилось, хорошо бы только пароль в команде набирать, чтобы и видеть и повторять. Потвердилась теория что не хватает привилегий
ДБ terminal
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0 "internal error/check (not system error)
SSH terminal
channel 3: open failed: administratively prohibited:open failed
Здравствуйте, hrensgory, Вы писали:
H>13.05.2016 22:12, AlexNek пишет:
>> H>Может dbUser-у просто запрещён порт форвардинг в конфиге ssh сервера? >> >> H>Точнее, может быть он разрешён admin или какой-то группе, куда он >> H>входит, а остальным запрещён. >> А как это проверить?
H>Заглянуть в /etc/ssh/sshd_config или как его там на linux сервере.
AllowTcpForwarding yes
Разрешил глобально и одна ошибка ушла из SSH терминала и могу подсоединятся с некоторыми комбинациями настроек.
Но access denied из под mySQL остался.