MySQL-Zugang via SSH

Probleme mit Samba, NFS, FTP und Co.
Antworten
raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

MySQL-Zugang via SSH

Beitrag von raa » 24.11.2018 22:04:39

Hi,

habe meinen neuen Server so weit "abgedichtet", dass ich nur noch Zugang via SSH und PGP habe. Nur die Anmeldung beim MySQL- (Verzeihung: MariaDB-) :wink: Server klappt erst mal nicht, wie fast immer. Also was habe ich (u.a) versucht:

- Auf dem Client:

-- Portweiterleitung

Code: Alles auswählen

ssh -l root -L 3307:127.0.0.3:3306
-- Anmeldung beim MySQL-Server (auf dem Server natürlich): :wink:

Code: Alles auswählen

root@Melina:/home/hk# mysql --host=127.0.0.1 --port=3307 -u ***** -p*********
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0 "Internal error/check (Not system error)"
- Und auf dem Server:

Code: Alles auswählen

Connection to port 3307 forwarding to 127.0.0.3 port 3306 requested.
debug2: fd 9 setting TCP_NODELAY
debug2: fd 9 setting O_NONBLOCK
debug3: fd 9 is O_NONBLOCK
debug1: channel 3: new [direct-tcpip]
debug3: send packet: type 90
debug3: receive packet: type 92
channel 3: open failed: connect failed: Connection refused
debug2: channel 3: zombie
debug2: channel 3: garbage collecting
debug1: channel 3: free: direct-tcpip: listening port 3307 for 127.0.0.3 port 3306, connect from 127.0.0.1 port 36462 to 127.0.0.1 port 3307, nchannels 4
debug3: channel 3: status: The following connections are open:
  #2 client-session (t4 r0 i0/0 o0/0 fd 6/7 cc -1)
Und nune? Fragt mich lieber nicht, was ich sonst alles noch versucht habe. :hail:
Zuletzt geändert von raa am 26.11.2018 16:10:39, insgesamt 2-mal geändert.

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: MySQL-Zugang via SSH

Beitrag von thoerb » 24.11.2018 23:48:35

raa hat geschrieben: ↑ zum Beitrag ↑
24.11.2018 22:04:39
Und nune? Fragt mich lieber nicht, was ich sonst alles noch versucht habe. :hail:
https://kofler.info/root-login-problem-mit-mariadb/

Das weißt du schon?

...aber du bist ja auch als root angemeldet. :|

raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Re: MySQL-Zugang via SSH

Beitrag von raa » 25.11.2018 02:15:26

thoerb hat geschrieben: ↑ zum Beitrag ↑
24.11.2018 23:48:35
https://kofler.info/root-login-problem-mit-mariadb/

Das weißt du schon?

Ja. :wink: Und keine Sorge, ich hab' schon genug User auf meinem Datenbankserver, die das nicht brauchen.
thoerb hat geschrieben: ↑ zum Beitrag ↑
24.11.2018 23:48:35
...aber du bist ja auch als root angemeldet. :|
Jein. ;) Auf dem Server gelegentlich, aber wenn ich vom Client aus auf den Datenbankserver zugreifen will, kommt ja gar nicht erst eine Verbindung zustande, egal, wer ich nun auf dem Client bin.

raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Re: MySQL-Zugang via SSH

Beitrag von raa » 25.11.2018 16:25:58

Problem gelöst. Und zwar ganz einfach. :wink:

schwedenmann
Beiträge: 5525
Registriert: 30.12.2004 15:31:07
Wohnort: Wegberg

Re: [Gelöst] MySQL-Zugang via SSH

Beitrag von schwedenmann » 25.11.2018 18:27:55

Hallo
Problem gelöst. Und zwar ganz einfach. :wink:
Würdest du das DF an der Lösung teilhaben lassen?

mfg
schwedenmann

raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Re: MySQL-Zugang via SSH

Beitrag von raa » 25.11.2018 19:22:19

Naja, ich dachte eigentlich, dass hier keine Anwort kam, läge daran, dass das für euch trivial ist. :wink: Das Problem war nicht der Zugriff über SSH / PGP (der funktionierte ja schon, auf OS-Ebene), sondern:
thoerb hat geschrieben: ↑ zum Beitrag ↑
24.11.2018 23:48:35
https://kofler.info/root-login-problem-mit-mariadb/
Das weißt du schon?
...aber du bist ja auch als root angemeldet. :|
Genau. Du tippst einfach "mysql" ein, und schon bist du drin. Du brauchst nicht mai ein Passwort. Das funzt aber nicht remote. Die Standardkonfiguraton des DB-Servers:

1. Diesen User "root", ohne Passwort und mit allen Rechten, gibt's nur @localhost
2. Der DB-Server lauscht nur an localhost:3306

Damit ist kein Remote-Zugriff möglich, der Trick mit der Portweiterleitung auf Clientseite funzt auch nicht mit "localhost".

Zu 1.: Also einen User angelegt:

Code: Alles auswählen

MariaDB [(none)]> CREATE USER 'root'@'%' IDENTIFIED BY '<passwort>';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye
Zu 2.: In der /etc/mysql/mariadb.cnf eingetragen:

Code: Alles auswählen

bind-address = <IP des Servers>
DB-Server neu gestartet:

Code: Alles auswählen

root@euve264366:~# service mysqld restart
Und das war's. Einloggen vom Client aus:

Code: Alles auswählen

root@Melina:/home/hk# mysql --host=<IP des Servers> -u root -p<passwort>
Funzt. :wink:

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: [Gelöst] MySQL-Zugang via SSH

Beitrag von heisenberg » 26.11.2018 11:31:46

Aus Sicherheitsgründen, würde ich den MySQL - wenn der Server direkt mit einer Public-IP im Internet hängt - nicht von aussen erreichbar laufen lassen. Teilweise bieten Admin-GUIs auch die Möglichkeit an sich via SSH zum MySQL-Server zu verbinden.

Die Variante mit der SSH-Portweiterleitung ist wesentlich sicherer.
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Re: [Gelöst] MySQL-Zugang via SSH

Beitrag von raa » 26.11.2018 16:07:53

heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 11:31:46
Aus Sicherheitsgründen, würde ich den MySQL - wenn der Server direkt mit einer Public-IP im Internet hängt - nicht von aussen erreichbar laufen lassen. Teilweise bieten Admin-GUIs auch die Möglichkeit an sich via SSH zum MySQL-Server zu verbinden.
Stimmt, z.B. meine MySQLWorkbench, das will aber dieses Mal ebenso wenig funzen wie die Portweiterleitung. Womit wir wieder bei der Eingangsfrage wären. ;)

Benutzeravatar
bluestar
Beiträge: 2334
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: MySQL-Zugang via SSH

Beitrag von bluestar » 26.11.2018 16:17:53

Ich vermute mal dass dein Problem daraus resultiert, dass der MariaDB Server standardmäßig nur auf dem UNIX-Socket lauscht und nicht auf dem TCP Socket.

Du könntest mal folgende versuchen

Code: Alles auswählen

bind-address = 127.0.0.1
und danach über den SSH-Tunnel darauf zugreifen:

Code: Alles auswählen

ssh -L3306:127.0.0.1:3306 <weitere Optionen>

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: MySQL-Zugang via SSH

Beitrag von heisenberg » 26.11.2018 16:49:08

Habe das gerade auch nochmal nachvollzogen. Wenn ich also einen SSH-Tunnel zu einem Server aufbaue:

Code: Alles auswählen

 ssh -L 3308:127.0.0.1:3306 meinserver
...und somit den MySQL-Port lokal auf 3308 habe, und dann mich mit dem mysql-Kommandozeilen-Client verbinde...

Code: Alles auswählen

mysql -P 3308  -uheisenberg -psehrgeheim
Dann bekomme ich:

Code: Alles auswählen

ERROR 1045 (28000): Access denied for user 'heisenberg'@'localhost' (using password: YES)
Wichtig ist das -h flag, d. h. der hostname. Der darf nicht localhost sein, sondern muss 127.0.0.1 sein. Der Grund dafür liegt in der Konvention, dass Verbindungen die zu localhost aufgebaut werden, grundsätzlich über einen Unix-Domain-Socket(=Eine Datei im Dateisystem) aufgebaut werden, also per Vorgabe über den Socket /var/run/mysqld/mysqld.sock. Beim Portforwartung muss aber die Verbindung via TCP aufgebaut werden. Da Verbindungen zu IP-Adressen immer via TCP aufgebaut werden, muss localhost als IP-Adresse angegeben werden. Also ist das Kommando:

Code: Alles auswählen

mysql -P 3308  -uheisenberg -psehrgeheim -h 127.0.0.1
Das bedeutet vermutlich dass auch im mysqlworkbench 127.0.0.1 als Hostname angegeben werden muss.

EDIT

Also mysql-workbench geht bei mir mit tcp/ip über ssh sowohl mit localhost als auch mit 127.0.0.1
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Re: MySQL-Zugang via SSH

Beitrag von raa » 26.11.2018 17:43:53

heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 16:49:08

Code: Alles auswählen

 ssh -L 3308:127.0.0.1:3306 meinserver
[x] Done Mit 3307: - aber egal. :wink:
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 16:49:08
...und somit den MySQL-Port lokal auf 3308 habe, und dann mich mit dem mysql-Kommandozeilen-Client verbinde...

Code: Alles auswählen

mysql -P 3308  -uheisenberg -psehrgeheim
Hmmm....

Code: Alles auswählen

mysql --host=<meinserver> -u root -p<passwort>
Dann bin ich drin. Über SSH oder nicht? ;) Aber:

Code: Alles auswählen

root@Melina:/home/hk# mysql --host=<meinserver> -P 3308 -u root -p<passwort>
ERROR 2003 (HY000): Can't connect to MySQL server on '<meinsersver>' (111 "Connection refused")
???? Auf dem Server ist nach wie vor:

Code: Alles auswählen

bind-address = <meinserver>
Also wenn ich dort eingeloggt bin, komme ich gar nicht 'rein. ;)

Code: Alles auswählen

root@euve264366:~# mysql
mysql: unknown variable 'bind-address=<meinserver>'
Und vom Client aus:

Code: Alles auswählen

root@Melina:/home/hk# mysql --host=127.0.0.1 -u root -p<passwort>
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Einleuchtend oder verwirrend? :wink:

EDIT: Bin fertig mit Editieren. :wink:

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: MySQL-Zugang via SSH

Beitrag von heisenberg » 26.11.2018 18:06:22

raa hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 17:43:53

Code: Alles auswählen

root@euve264366:~# mysql
mysql: unknown variable 'bind-address=<meinserver>'
Du hast die bind-address in die falsche Datei eingetragen. Du hast Sie in der client-config eingetragen und nicht in der Serverconfig.

Bei mir (Debian Stretch) mit MariaDB sieht der Inhalt von /etc/mysql so aus:

Code: Alles auswählen

./conf.d
./conf.d/mysql.cnf
./conf.d/mysqld_safe_syslog.cnf
./conf.d/mysqldump.cnf
./debian.cnf
./mariadb.cnf
./debian-start
./mariadb.conf.d
./mariadb.conf.d/50-server.cnf
./mariadb.conf.d/50-client.cnf
./mariadb.conf.d/50-mysql-clients.cnf
./mariadb.conf.d/50-mysqld_safe.cnf
./my.cnf
./my.cnf.fallback
In 50-server.cnf muss die Einstellung der Bind-Address rein, und zwar so:

Code: Alles auswählen

bind-address            = 127.0.0.1
Du hast Sie möglicherweise in my.cnf eingetragen. Da muss die Einstellung wieder raus. Danach MariaDB neu starten.#

Aber ehrlichgesagt, ist mir das gerade alles viel zu planlos hier. Bitte prüfe folgendes nach obiger Änderung folgendes:

1. Wie ist die aktuelle bind-ip auf Deinem Server mit dem Befehl: netstat -ntlp

Da sollte stehen:

Code: Alles auswählen

Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      949/mysqld     
2. Dann führst Du die SSH-Verbindung aus und prüftst den lokalen Port

Code: Alles auswählen

ssh -L 3307:127.0.0.1:3306 deinuser@deinserver
In einem anderen Terminal lokal prüfen, ob der Port jetzt offen ist:

Code: Alles auswählen

netstat -nltp

# sollte so aussehen

Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
...
tcp        0      0 127.0.0.1:3307          0.0.0.0:*               LISTEN      20282/ssh         
...
3. Dann führst Du den mysql-Test lokal aus

Code: Alles auswählen

mysql -h 127.0.0.1 -P 3307 -uDEINMYSQLUSER -pDEINMYSQLPASSWORT
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Re: MySQL-Zugang via SSH

Beitrag von raa » 26.11.2018 23:19:12

heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
raa hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 17:43:53

Code: Alles auswählen

root@euve264366:~# mysql
mysql: unknown variable 'bind-address=<meinserver>'
Du hast die bind-address in die falsche Datei eingetragen. Du hast Sie in der client-config eingetragen und nicht in der Serverconfig.
Nein, in die /etc/mysql/mariadb.cnf auf dem Server. Das merke ich ganz deutlich daran, dass ich dort auf Konsolenebene (also als root@localhost) nicht mehr 'reinkomme. ;)

Übrigens falsch (oder überholt), was da an bestimmten Stellen zu lesen ist: Man soll in dieser Datei "bind-adress = 127.0.0.0.1" durch "bind-address = <meinserver>" ersetzen. Diese Zeile gibt's bei mir gar nicht, der MariaDB-Server lauscht ohne die defaultmäßig an 127.0.0.0.1 (Port 3306). Frag' mich nun nicht, wo das wieder steht, es funktioniert jedenfalls so. :wink:
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
Bei mir (Debian Stretch) mit MariaDB sieht der Inhalt von /etc/mysql so aus:
[...]
Bei mir so (auf dem Server):

Code: Alles auswählen

drwxr-xr-x 2 root root 4096 Nov 21 04:08 conf.d
-rw------- 1 root root  277 Nov 21 04:08 debian.cnf
-rwxr-xr-x 1 root root 1509 Aug 10  2017 debian-start
-rw-r--r-- 1 root root  899 Nov 25 19:19 mariadb.cnf
drwxr-xr-x 2 root root 4096 Nov 21 04:08 mariadb.conf.d
lrwxrwxrwx 1 root root   24 Nov 21 04:08 my.cnf -> /etc/alternatives/my.cnf
-rw-r--r-- 1 root root  839 Jul  9  2016 my.cnf.fallback
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
In 50-server.cnf muss die Einstellung der Bind-Address rein, und zwar so:

Code: Alles auswählen

bind-address            = 127.0.0.1
Du hast Sie möglicherweise in my.cnf eingetragen.
Weder noch also.
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
Aber ehrlichgesagt, ist mir das gerade alles viel zu planlos hier.
Irgendwie schon. :wink:
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
Bitte prüfe folgendes nach obiger Änderung ...
Nach welcher Änderung also? Und dass man nach jeder Änderung der Konfiguration den Server neu starten muss - darüber reden wir wohl. :wink:

Erst mal gut's Nächtle, hoffentlich sehen wir beide morgen klarer. :wink:

raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Re: MySQL-Zugang via SSH

Beitrag von raa » 27.11.2018 10:41:18

Also was habe ich jetzt gemacht:
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
In 50-server.cnf muss die Einstellung der Bind-Address rein, und zwar so:

Code: Alles auswählen

bind-address            = 127.0.0.1
Du hast Sie möglicherweise in my.cnf eingetragen. Da muss die Einstellung wieder raus.
Nein, wie gesagt: Nur die Zeile "bind-address = <meinserver>" aus /etc/mysql/mariadb.cnf wieder 'rausgenommen.
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
Danach MariaDB neu starten.
Klar.
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
1. Wie ist die aktuelle bind-ip auf Deinem Server mit dem Befehl: netstat -ntlp

Da sollte stehen:

Code: Alles auswählen

Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      949/mysqld     
Ok.
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
2. Dann führst Du die SSH-Verbindung aus

Code: Alles auswählen

ssh -L 3307:127.0.0.1:3306 deinuser@deinserver
Ok.
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
In einem anderen Terminal lokal prüfen, ob der Port jetzt offen ist:

Code: Alles auswählen

netstat -nltp

# sollte so aussehen

Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
...
tcp        0      0 127.0.0.1:3307          0.0.0.0:*               LISTEN      20282/ssh    
...
Ok.
heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 18:06:22
3. Dann führst Du den mysql-Test lokal aus

Code: Alles auswählen

mysql -h 127.0.0.1 -P 3307 -uDEINMYSQLUSER -pDEINMYSQLPASSWORT
OK. Danke!

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: MySQL-Zugang via SSH

Beitrag von heisenberg » 27.11.2018 10:52:52

Heisst ok: "Du hast es ausgeführt und das Ergebnis kam dann wie beschrieben"?

-----

Erklärung zur Fehlermeldung von gestern

Ansonsten sieht bei mir mariadb.cnf ungefähr so aus:

Code: Alles auswählen

# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
Wenn Du da etwas direkt unter [client-server] anfügst, dann wird das dem Abschnitt client-server zugerechnet. D. h. für den Server und für den Client. (Also genau so wie der Satz in der Datei über dem Bereichsnamen es erklärt). bind-address ist eine reine Servereinstellung. Deswegen kam bei Dir der Fehler. Deswegen muss so etwas in die erwähnte 50-server.cnf in den [mysqld] Bereich. client bedeutet in dem Zusammenhang nicht Dein Rechner bei Dir zu Hause, sondern das mysql/mariadb-client-Programm auf Deinem Server mit dem Kommandonamen mysql.
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Re: MySQL-Zugang via SSH

Beitrag von raa » 27.11.2018 18:07:16

heisenberg hat geschrieben: ↑ zum Beitrag ↑
27.11.2018 10:52:52
Heisst ok: "Du hast es ausgeführt und das Ergebnis kam dann wie beschrieben"?
Ja.
heisenberg hat geschrieben: ↑ zum Beitrag ↑
27.11.2018 10:52:52
Erklärung zur Fehlermeldung von gestern
Ist doch klar. Das war mein Eintrag in der /etc/mysql/mariadb.cnf auf de Server

Code: Alles auswählen

bind-address = <server>
Den hab' ich wieder 'rausgenommen.

Antworten