MySQL Workbench'i SSH üzerinden TCP / IP ile kullanmaya çalışıyor - bağlanamadı


41

PC'den MySQL Workbench'te SSH bağlantısı üzerinden TCP / IP kullanarak bağlanamıyorum. Neler oluyor?

Bir Ubuntu sunucusu mysql.myhost.com üzerinde bir MySQL 5.1 veritabanı oluşturdum . Yerel olarak erişebiliyorum. MySQL Workbench (PC), ssh üzerinden TCP üzerinden bağlantı kurmayı teklif eder. Komut satırı mysql'nin iyi çalıştığı uzak sunucuda 3306 numaralı bağlantı noktasında çalışır.

Aşağıdaki oturum ayrıntılarını kullandım:

  • Bağlantı Yöntemi: SSH üzerinden TCP / IP.
  • SSH Ana Bilgisayar Adı: mysql.myhost.com : 3306
  • SSH kullanıcı adı: linux giriş bilgilerim
  • SSH açık anahtar dosyası: yerel açık anahtar dosyam
  • MySQL ana bilgisayar adı: 127.0.0.1 MySQL
  • Sunucu Bağlantı Noktası: 3306
  • Kullanıcı adı: root

Bağlanmaya çalıştığımda bir hata mesajı alıyorum: "127.0.0.1:3306'da MySQL'e mysql.myhost.com adresindeki SSH tüneli üzerinden kullanıcı kökü ile bağlanılamadı"

"MySQL sunucusuna '127.0.0.1' (10061) üzerinden bağlanılamıyor"

Başka bir test olarak - Putty kullanarak bağlantı noktası 3306 ile bir SSH tüneli kurdum ve MySQL Workbench'i kullanarak yerel 3306'ma bağlantıları yukarıda açıklandığı gibi uzaktaki sunucuya yönlendiren bu tünelden OK ile bağlayabilirim. Ancak Workbench'te çalışan "SSH üzerinden TCP / IP" yi alamıyorum.

İkincil soru: Workbench "SSH genel anahtar dosyasına giden yol" sorusunu sorduğunda gerçekten özel anahtar dosyama ihtiyaç duymuyor mu?


4
İyi keder. bugs.mysql.com/bug.php?id=61368 , OpenSSH biçiminde gerekli olan bir ÖZEL anahtar dosyasının IS olduğunu gösterir. Bunu merak ettim ama emin değildi.
Dizzley

Yanıtlar:


29

Kendi kendime bu hatayla karşılaştığımda bu soruya rastladım. Sonunda konfigürasyonu çözebilirim.

  1. Zaten bind_address = 127.0.0.1 olan /etc/mysql/my.cnf dosyasındaki hiçbir şeye dokunmadım. Yani sadece localhost bağlanabilir.
  2. OpenSSH sunucusunu kullanıyorum. Bu yüzden config / etc / ssh / sshd_config dosyasında no ' dan evet' e döndüm , TCP yönlendirmeden sorumlu param, böylece AllowTcpForwarding evet .
  3. Sonunda MySQL WorkBench'e girilenler var.

    • SSH Ana Bilgisayar Adı: 192.168.0.8:22 (SSH sunucum 22 numaralı bağlantı noktasını dinler)
    • SSH Kullanıcı Adı: sshuser
    • SSH Anahtar Dosyası: * C: \ Users \ windowsuser \ .ssh \ id_rsa * (genel olsa bile, özel anahtar olmalıdır)
    • MySQL Ana Bilgisayar Adı: 127.0.0.1 (bu değiştirilmemelidir, çünkü varsayılan olarak MySQL sunucusu yalnızca benim değiştirmediğim localhost'a bağlıdır)
    • MySQL Sunucu Portu: 3306 (ayrıca varsayılan)
    • Kullanıcı adı: root

Sizin için kalan tek şey SSH sunucunuzu şifreler yerine anahtarlarla çalışacak şekilde doğru şekilde yapılandırmaktır. Umarım bu birine yardımcı olur.


Sunucu tarafında yapmam gereken tek şey, / etc / ssh / sshd_config dosyasının bu satır olduğundan emin olmaktı: bir AuthorizedKeysFile /home/root/.ssh/authorized_keysyetkili olarak benim anahtar_ININ benim PUBLIC anahtarım olduğunu.
RyanNerd

Lütfen uzak sunucuya ayarlanan 2. adımın AllowTcpForwarding yesuygulanıp uygulanmadığını, yani bağlanmaya çalıştığımız MySQL örneğine sahip ana bilgisayarın; veya MySQL Workbench yüklü yerel makine
Nam G VU

@NamGVU 2. adım, MySQL'in kurulu olduğu uzak sunucuya uygulanır. Özellikle, SSH üzerinden MySQL'e tünel açılmasını sağlayan OpenSSH sunucusuna.
Göz

Denedim ama hala tünel açamıyorum. MySQL Workbench bana günlük dosyasında daha fazla hata detayı okumamı söyledi. Nerede okuyacağını biliyor musun?
Nam G VU

1
Bugün işe koyuldum - AllowTcpForwardinggirişi yapılandırdıktan sonra yeniden başlatmaya ihtiyacım var
Nam G VU

8

SSH üzerinden TCP / IP yaklaşımının MySQL bağlantısının altında yatan bir "normal" SSH bağlantısı kurarak çalıştığını düşünüyorum ( -LOpenSSH komut satırı istemcisini kullanarak tünellediğiniz gibi).

Bu nedenle, tüneli kurduğunuz sunucudaki bir SSH sunucusuyla bağlantı belirtmeniz gerekir. Burada kullanıyor gibi görünüyorsunuz mysql.myhost.com:3306, bu SSH sunucusunu (MySQL değil) 3306 numaralı bağlantı noktasında çalıştırdığınız anlamına gelir.

127.0.0.1:3306 tarihinde bir MySQL sunucusunu ve mysql.myhost.com3306 bağlantı noktasında harici IP adresinizdeki bir SSH sunucusunu bağlamak mümkündür , ancak bu pek olası değildir. Sanırım SSH sunucunuz 22 numaralı bağlantı noktasını dinliyor (varsayılan).

Muhtemelen kullanmalısın mysql.myhost.com:22. (Putty gibi normal bir SSH istemcisi aracılığıyla bağlanabildiğinizi kontrol edin.)


8

Kullanıcıları mysql.user tablosunda kontrol etmeniz gerekebilir.

Bu sorguyu çalıştır:

SELECT user,host FROM mysql.user;

Böyle bir şey görmelisin:

mysql> SELECT user,host,password FROM mysql.user;
+------------------+-------------+-------------------------------------------+
| user             | host        | password                                  |
+------------------+-------------+-------------------------------------------+
| root             | localhost   | *7A670E02260CDEEFF062DD08F3A6F6DA079998CB |
| ping             | %           | *124E1DB56CC8D6E2FEE8315BB2544BF04B980DB6 |
| admin            | 10.67.135.% | 1a6858054a41fede                          |
| icorbin          | 10.67.135.% | 366ed93a7396650e                          |
+------------------+-------------+-------------------------------------------+
4 rows in set (0.00 sec)

Lütfen dikkat et

  • root @ localhost sadece localhost adresinden giriş yapabilir.
  • ping @ '%' TCP / IP ile giriş yapabilir
  • admin@10.67.135.% sadece bu netblock üzerinden TCP / IP ile giriş yapabilir
  • icorbin@10.67.135.% sadece bu netblock üzerinden TCP / IP ile giriş yapabilir

Root'un TCP / IP ile bağlanmasını istiyorsanız, bir root kullanıcısı için IP adresi veya netblock belirtmelisiniz.

Bunun gibi bir şey:

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'whateverpassword';

veya root şifresi root @ localhost için aynı ise

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY PASSWORD '*7A670E02260CDEEFF062DD08F3A6F6DA079998CB ';

CAVEAT: root @ '%' normal olarak tavsiye edilmez. Belki root@'10.% 'ya da root için başka bir netblock deneyin.

Bir şans ver !!!


3
...@localhostSSH tüneli üzerinden çalışmamalı mıyım , çünkü MySQL sunucusu söz konusu olduğunda, bağlantı tünelin sonundan mı geliyor?
Bruno

@Bruno: Bilmenin kesin bir yolu başarılı bir şekilde bağlanmak ve ardından SELECT USER (), CURRENT_USER (); ve çıktılarını görün. USER () işlevi, kimlik doğrulaması yapmaya çalıştığınızı, CURRENT_USER (), MySQL'in kimliğini doğrulamanıza izin verenleri tekrarlar. CURRENT_USER () root @ localhost ifadesini eklerse, sorunuzun cevabı evet olur.
RolandoMySQLDBA



2

Benim sorunum ed25519SSH anahtarını kullanmaya çalışıyor olmamdan kaynaklanıyordu. SSH sunucusunda bu hatayı auth.log:

sshd[25251]: Connection closed by 192.168.x.x [preauth]

Bir RSA anahtarı kullanmaya başladığımda her şey beklendiği gibi çalıştı.


1

Sunucuya ssh ile bağlanmaya çalışıyorsunuz fakat mysql portunu kullanıyorsunuz. İstediğiniz port, ssh sunucunuz ne dinliyorsa dinlesin, genellikle 22, sonra localhost ve mysql hostname ve port için 3306.


1

Ben de aynı problemle karşılaştım. Kontrol ettim ve AllowTcpForwarding'i ayarlamaya çalıştım Evet, ancak sshd_config programımda eksikti, bu yüzden yardım yok. ssh ana bilgisayar adının mysql ana bilgisayar adıyla aynı OLMADIĞINDAN emin olun (localhost kullanın).

Tezgahta, yeni bağlantı eklemek için + seçeneğini belirleyin ve aşağıdakileri ayarlayın:

  • bağlantı yöntemi: standart TCP / IP üzerinden SSH
  • SSH Ana Bilgisayar Adı: 192.168.0.50:22 (uzak SSH sunucusu IP ve bağlantı noktasını yerleştirin (isteğe bağlı))
  • SSH Kullanıcı Adı: sshuser
  • Şifreyi ayarlayabilir veya komut istemine ekleyebilirsiniz.
  • MYSQL Ana Bilgisayar Adı: localhost veya 127.0.0.1
  • MYSQL Sunucu portu: 3306
  • Şifreyi ayarlayabilir veya komut istemine ekleyebilirsiniz.

Test bağlantısı. Başarılı olmalı ve sonra OK tuşuna basın.


1

Bazen PuTTY tarafından oluşturulan anahtarlar çalışmayabilir. Anahtar çifti oluşturmak için Linux kutusundaki ssh-keygen kullanın. Yeni id_rsa içeriğini Windows'taki bir metin dosyasına kopyalayın . İd_rsa.pub içeriğini Linux kutusundaki onay_ anahtarlarına eklediğinizden emin olun. Workbench'teki tüm diğer varsayılan değerler, MySQL Hostname için 127.0.0.1 dahil olmak üzere gayet iyi. Elbette SSH üzerinden Standart TCP / IP olması gerekir.


1

Aynı hatayı buldum. Sorun, zaman aşımının "biraz" olmasıdır. Değeri bile 120 saniyeye kadar düşürdüm, bu da yardımcı olmadı.

Benim durumumda bir nslookup myserver.com yaparak ve hostname yerine IP adresini kullanarak çözebilirim. Benim varsayımım IPv4'ten IPv6'ya bağlanmaya çalışan bir problem.


0

Ubuntu makinesinde MySQL sürüm 5.5.29 ve MySQL Workbench 5.2.40 çalıştıran bir sunucuya bağlanan aynı sorunu yaşadım. SSH sunucusu bir ssh tuşunun kullanılmasını gerektirir.

Kök kullanıcısını kullanarak MySQL sunucusuna bağlanamadım, bunun yerine oturum açma için kullanmak üzere ayrı bir kök dışı kullanıcı oluşturmak zorunda kaldım. Ondan sonra gayet iyi bağlanabildim.

Bu yardımcı olur umarım.


0

Tamam, bunun eski bir soru olduğunu biliyorum, ancak saatlerce saçımı bunun üzerine çıkardım. Bruno ve Göz tarafından belirtilen her şeyi kontrol ettim ve hepsi iyi görünüyordu. Sonra farkettim ki bu gerçekten özel / açık anahtar bir şeydi. Bu yüzden Pageant’u başlattım ve özel anahtarımı ekledim, böylece MySQL Workbench’in okuyabileceği ve bağlanabileceği ortak bir anahtar oluşturacaktı! (MySQL Workbench gerçekten çalışmaya başladığında aslında mutlu bir şekilde antiklimaktikti.)

TLDR: Özel anahtarınızdan ortak bir anahtar oluşturmak için Pageant kullanın.


Özel anahtarlar asla özel anahtar olarak kullanılmamalıdır, bu yüzden özeldirler.
James Anderson,

@JamesAnderson, hatanın sebebi bu değil mi? Metin özel olarak soruluyor, herkese açık olmalı ... en azından hata bağlantısına göre. Ya da değil?
Thufir

-1

Sadece bulduklarım ... sık sık bir sunucuya giriş yapabilmelerini ve orada dosya ve benzeri şeyler oluşturabilmelerini önlemek için SSH sunucusunda kabuksuz (/ sbin / nologin gibi) kullanıcılar oluşturuyorum ... (üretim sistemleri için güvenlik duvarlarında yapıyorum).

Bundan sonra düzenli bir Linux ortamında, bundan sonra portları yine de iletebilirsiniz:

ssh -Nf -L 3306:%mysql_ip%:%mysql_port% %ssh_host%

ve bundan sonra yerel iş istasyonundan aşağıdaki şekilde bağlantı kurun:

mysql -h localhost:3306 -u %mysql_user% -p

Ancak çalışma tezgahı, MySQL'e bağlanamadığını bildiren bir hata veriyor ... Bu kullanıcının kabuğunu değiştirirseniz, diyelim ki, / bin / bash - bundan sonra her şey yolunda gider.

Workbench'in uzak SSH sunucusunda neden yerel kabuk gerektirdiği hakkında hiçbir fikrim yok.


-1

Sadece mysql tezgahına uygun formatta yeni bir RSA anahtarı oluşturun.

Örneğin:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.