staging.inyokaproject.org

Einstellungen Mysql - SSH - Pythonprogramm

Status: Gelöst | Ubuntu-Version: Xubuntu 20.04 (Focal Fossa)
Antworten |

LinJoe

Anmeldungsdatum:
14. Juni 2018

Beiträge: 109

Hallo und alles Gute für 2021.

Seit letztem Jahr versuche ich, eine Mysql auf meinem Server im LAN korrekt in Betrieb zu nehmen und aus dem LAN zu erreichen.

Hintergrund ist, dass ich Messwerte von Raspberrys dort speichern möchte.

Die Verbindung soll über SSH erfolgen, was schon länger im Terminal von meinem Laptop aus funktioniert.

In der Mysql habe ich einen Table "smarthome" angelegt, ebenso einen User "messi" mit PW.

Erstes Problem, ich kann ihm nicht alle Rechte zuteilen, root fehlt dazu das Recht ☹

Mit GRANT ... kann ich mir nicht selbst die Rechte geben, und .... gerade hab ich nich auch als root rausgeschossen...

mysql -u root -p
mysql: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 22.
mysql: [ERROR] Fatal error in defaults handling. Program aborted!

Den SSH Tunnel für mein Programm habe ich so gestartet:

  ssh -v -N -L 3307:127.0.0.1:3306 192.168.1.100 

Port 3306 soll zum Mysql weitergeleitet werden, 3307 wird im Programm für die Kommunikation vom Laptop benutzt.

Der SSH Tunnel wird von mir als Laptop-user aufgebaut. Der user messi als user des Programms und von Mysql ist jedoch ein anderer.

Geht das? Kommt der User auch durch meinen Tunnel?

SSH gibt bei dem Versuch folgendes aus:

debug1: Authentication succeeded (publickey).
Authenticated to 192.168.1.100 ([192.168.1.100]:22).
debug1: Local connections to LOCALHOST:3307 forwarded to remote address 127.0.0.1:3306
debug1: Local forwarding listening on ::1 port 3307.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on 127.0.0.1 port 3307.
debug1: channel 1: new [port listener]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Remote: /home/joe/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
debug1: Remote: /home/joe/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
debug1: Connection to port 3307 forwarding to 127.0.0.1 port 3306 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 3307 for 127.0.0.1 port 3306, connect from 127.0.0.1 port 56074 to 127.0.0.1 port 3307, nchannels 3

Auf dem Laptop starte ich zum Test in Thonny folgendes Progrämmchen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import mysql.connector

mydb = mysql.connector.connect(
    
    host="127.0.0.1",
    port="3307",
    user="messi",
    password="mess")

mycursor = mydb.cursor()

mycursor.execute("SHOW DATABASES")

for x in mycursor:
  print(x) 

was mit folgendem Fehler quittiert wird:

Traceback (most recent call last):
  File "/home/joe/Technik/Elektronik/Raspberry/testmysql2.py", line 3, in <module>    mydb = mysql.connector.connect(
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/__init__.py", line 271, in connect  return MySQLConnection(*args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 107, in __init__ self.connect(**kwargs)
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/abstracts.py", line 985, in connect self._open_connection()
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 309, in _open_connection self._do_handshake()
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 149, in _do_handshake packet = self._socket.recv()
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/network.py", line 267, in recv_plain raise errors.InterfaceError(errno=2013)
mysql.connector.errors.InterfaceError: 2013: Lost connection to MySQL server during query

Kann der Fehler "mysql.connector.errors.InterfaceError: 2013" auch am SSH liegen oder deutet das auf einen Datenbankfehler hin?

Auch nach tagelangen Lesen in Foren bis hin zu Stackoverflow u.s.w. , was ich nicht wirklich verstehe, habe ich mich immer weiter verwurschtelt. Z.T. sind die Beiträge zu alt (2008) oder es wird kein SSH benutzt oder die User wollen aus dem Internet zugreifen...

Nicht wirklich eine Konstellation, die ungefähr der meinigen entspricht.

Wenn ich noch was Wichtiges vergessen haben sollte, sagts mir bitte.

Danke für jede Unterstützung, um aus dem Djungel herauszukomen,

VG Jörg

homer65

Avatar von homer65

Anmeldungsdatum:
8. November 2005

Beiträge: 586

Kann Dir leider bei den meisten Problemen nicht helfen.
Aber zum zerschossenen root MySQL User:
Es gibt noch den debian-sys-maint, dessen Passwort steht in /etc/mysql/debian.cnf
Aber Vorsicht, auf keinen Fall irgentetwas am debian-sys-maint ändern!

LinJoe

(Themenstarter)

Anmeldungsdatum:
14. Juni 2018

Beiträge: 109

homer65 schrieb:

Es gibt noch den debian-sys-maint, dessen Passwort steht in /etc/mysql/debian.cnf

Danke für deinen Tipp, aber ich komm gar nicht mehr rein, Fehler:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Muss jetzt noch nachlesen, was Socket bedeutet, das ist mir noch nicht so bewusst untergekommen.

JensHol

Anmeldungsdatum:
31. Oktober 2017

Beiträge: 324

Ich kenne das Socket Thema, wenn der mysql nicht (mehr) läuft

Wegen dem Connect prüf mal die Firewall logs, nicht dass dort Traffic geblockt wird. Bin mir nicht sicher, wie getunnelte Daten dort berücksichtigt werden.

JensHol

Anmeldungsdatum:
31. Oktober 2017

Beiträge: 324

Sieht nach deinem Problem aus:

I encountered this same error while trying to connect to mysql on another server via an ssh tunnel. I found that the bind-address parameter in /etc/my.cnf on the target server was bound to my external ip (dual NIC server) rather than internal, which I had no use for.

When I set bind-address=127.0.0.1, I could successfully use my ssh tunnel as follows:

ssh -N -f -L 3307:127.0.0.1:3306 user@server.name

mysql -h 127.0.0.1 --port=3307 --protocol=TCP -uusername -ppassword

https://serverfault.com/questions/489192/ssh-tunnel-refusing-connections-with-channel-2-open-failed

LinJoe

(Themenstarter)

Anmeldungsdatum:
14. Juni 2018

Beiträge: 109

Danke, danke, danke

der Tipp hat mir sehr geholfen ☺

Habe erst den Zugang zu Mysql "repariert" - ich hatte in der /etc/mysql/mysql.conf.d/mysqld.cnf mysqlx-bind-address=192.168.1.100 gesetzt ☹

Hab es zurückgestellt und so kam ich wieder auf Mysql.

Dann habe ich mit root und debian-sys-maint versucht, die Rechte des Users zu erweitern, ging aber nicht, weil ich eine fehlerhafte IP eingestellt habe. Für user@localhost ging es dann...

Danach habe ich noch in der /mysqld.cnf die bind-address auf 127.0.0.1 eingestellt. Jetzt läuft das Pythonprogramm einwandfrei:

>>> %Run testmysql2.py
('information_schema',)
('smarthome',)
>>> 

nochmal euch vielen Dank.

Antworten |