Mencoba menggunakan MySQL Workbench dengan TCP / IP over SSH - gagal terhubung

41

Saya tidak dapat terhubung menggunakan koneksi TCP / IP melalui SSH di MySQL Workbench dari PC. Apa yang sedang terjadi?

Saya membuat database MySQL 5.1 di server Ubuntu mysql.myhost.com . Saya dapat mengaksesnya secara lokal. MySQL Workbench (PC) menawarkan untuk membuat koneksi melalui TCP over ssh. Ini berjalan pada port 3306 pada server jauh di mana perintah-baris mysql berfungsi dengan baik.

Saya menggunakan detail sesi berikut:

  • Metode Koneksi: TCP / IP melalui SSH.
  • Nama Host SSH: mysql.myhost.com : 3306
  • Nama pengguna SSH: login linux saya
  • File kunci publik SSH: file kunci publik lokal saya
  • Nama host MySQL: 127.0.0.1 MySQL
  • Port Server: 3306
  • Nama pengguna: root

Saya mendapatkan pesan kesalahan ketika saya mencoba untuk terhubung: "Gagal terhubung ke MySQL pada 127.0.0.1:3306 melalui terowongan SSH di mysql.myhost.com dengan root pengguna"

"Tidak dapat terhubung ke server MySQL di '127.0.0.1' (10061)"

Sebagai tes lain - saya membuat terowongan SSH dengan port 3306 menggunakan Putty dan saya dapat menghubungkan OK menggunakan MySQL Workbench melalui terowongan yang meneruskan koneksi ke 3306 lokal saya ke server jauh seperti yang dijelaskan di atas. Tapi saya tidak bisa mendapatkan "TCP / IP over SSH" bekerja di Workbench.

Pertanyaan sekunder: ketika Workbench meminta "Path ke file kunci publik SSH" bukankah itu benar-benar membutuhkan file kunci pribadi saya?

Dizzley
sumber
4
Duka yang bagus. bugs.mysql.com/bug.php?id=61368 menunjukkan bahwa file IS PRIVATE yang diperlukan dalam format OpenSSH. Saya bertanya-tanya tentang hal itu tetapi tidak yakin.
Dizzley

Jawaban:

29

Saya menemukan pertanyaan ini ketika saya sendiri mengalami kesalahan ini. Saya akhirnya bisa mengetahui konfigurasi.

  1. Saya tidak menyentuh apa pun di /etc/mysql/my.cnf yang sudah memiliki bind_address = 127.0.0.1. Jadi hanya localhost yang dapat terhubung.
  2. Saya menggunakan server OpenSSH. Jadi dalam file config-nya / etc / ssh / sshd_config saya berubah dari tidak menjadi ya param yang bertanggung jawab atas penerusan TCP, jadi AllowTcpForwarding ya .
  3. Akhirnya saya memasukkan yang berikut ini di MySQL WorkBench.

    • Nama Host SSH: 192.168.0.8:22 (server SSH saya mendengarkan port 22)
    • Nama Pengguna SSH: sshuser
    • File Kunci SSH: * C: \ Users \ windowsuser \ .ssh \ id_rsa * (harus berupa kunci pribadi, meskipun dikatakan publik)
    • Nama Host MySQL: 127.0.0.1 (ini tidak boleh diubah, karena server MySQL secara default hanya terikat pada localhost yang tidak saya ubah)
    • Port Server MySQL: 3306 (juga default)
    • Nama pengguna: root

Satu-satunya hal yang tersisa bagi Anda adalah mengkonfigurasi dengan benar server SSH Anda agar berfungsi dengan kunci daripada kata sandi. Semoga ini bisa membantu seseorang.

Mata
sumber
Satu hal yang perlu saya lakukan di sisi server adalah memastikan / etc / ssh / sshd_config miliki adalah baris ini: AuthorizedKeysFile /home/root/.ssh/authorized_keysdan bahwa otor_keys memiliki kunci PUBLIC saya sebagai entri.
RyanNerd
Tolong jelaskan jika langkah 2 yang ditetapkan AllowTcpForwarding yesditerapkan ke server jauh yaitu host yang memiliki instance MySQL yang kami coba sambungkan; atau mesin lokal dengan MySQL Workbench diinstal
Nam G VU
@NamGVU langkah 2 berlaku untuk server jarak jauh di mana MySQL diinstal. Khususnya ke server OpenSSH yang menyediakan tunneling ke MySQL melalui SSH.
Eye
Saya mencoba tetapi masih gagal untuk terowongan. MySQL Workbench memberitahu saya untuk membaca lebih banyak detail kesalahan dalam file log. Bolehkah Anda tahu di mana membaca?
Nam G VU
1
Saya berhasil hari ini - perlu reboot setelah mengkonfigurasi AllowTcpForwardingentri
Nam G VU
8

Saya pikir pendekatan TCP / IP over SSH bekerja dengan membangun koneksi SSH "normal" yang mendasari koneksi MySQL (dengan cara yang sama seperti Anda akan menggunakan tunnel -Ldengan klien command-line OpenSSH).

Oleh karena itu, Anda harus menentukan koneksi ke server SSH di server tempat Anda membuat terowongan. Di sini, Anda tampaknya menggunakan mysql.myhost.com:3306, yang akan menyiratkan bahwa Anda menjalankan server SSH ini (bukan MySQL) pada port 3306.

Mungkin untuk mengikat server MySQL pada 127.0.0.1:3306 dan server SSH pada alamat IP eksternal Anda untuk mysql.myhost.compada port 3306, tapi itu sangat tidak mungkin. Saya kira server SSH Anda mendengarkan pada port 22 (default).

Anda mungkin harus menggunakan mysql.myhost.com:22. (Periksa Anda dapat menghubungkannya melalui klien SSH normal seperti Putty juga.)

Bruno
sumber
8

Anda mungkin perlu memeriksa pengguna di tabel mysql.user.

Jalankan kueri ini:

SELECT user,host FROM mysql.user;

Anda harus melihat sesuatu seperti ini:

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)

Mohon perhatikan itu

  • root @ localhost dapat login dari localhost saja.
  • ping @ '%' dapat masuk melalui TCP / IP
  • [email protected].% dapat login melalui TCP / IP dari netblock itu saja
  • [email protected].% dapat masuk melalui TCP / IP hanya dari netblock itu

Jika Anda ingin root terhubung melalui TCP / IP, Anda harus menentukan alamat IP atau netblock untuk pengguna root.

Sesuatu seperti ini:

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

atau jika kata sandi root sama untuk root @ localhost

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

CAVEAT: root @ '%' normanlly tidak disarankan. Mungkin coba root@'10.% 'atau netblock lain untuk root.

Cobalah !!!

RolandoMySQLDBA
sumber
3
Tidakkah seharusnya ...@localhostbekerja melalui terowongan SSH, karena sejauh menyangkut server MySQL, koneksi berasal dari ujung terowongan?
Bruno
@ Bruno: Satu cara pasti untuk mengetahuinya adalah dengan berhasil menyambungkan dan kemudian menjalankan SELECT USER (), CURRENT_USER (); dan lihat apa yang keluar. Fungsi USER () menggemakan apa yang Anda coba autentifikasi, sedangkan CURRENT_USER () menggemakan apa yang diizinkan oleh MySQL untuk diautentikasi. Jika CURRENT_USER () menggema root @ localhost, maka jawaban untuk pertanyaan Anda adalah ya.
RolandoMySQLDBA
3

Anda mungkin menggunakan versi MySQL Workbench yang lebih lama dan perlu memperbarui. Ini adalah bug dalam versi 6.0.8, yang saat ini merupakan versi dalam repositori Ubuntu. Memperbarui ke versi 6.3.6 memperbaiki ini untuk saya.

Unduh di sini: http://dev.mysql.com/downloads/workbench/#downloads

Gleasonator
sumber
2

Masalah saya adalah karena saya mencoba menggunakan ed25519kunci SSH. Saya perhatikan kesalahan ini di server SSH di auth.log:

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

Setelah saya beralih menggunakan kunci RSA, semuanya bekerja seperti yang diharapkan.

JBB
sumber
1

Anda mencoba terhubung ke server melalui ssh tetapi menggunakan port mysql. Port yang Anda inginkan adalah apa pun yang sedang didengarkan oleh server ssh Anda, biasanya 22, kemudian localhost dan 3306 untuk nama host dan port mysql.

Justin Buser
sumber
1

Saya menghadapi masalah yang sama. Saya memeriksa dan mencoba untuk mengatur AllowTcpForwarding Ya tetapi tidak ada di sshd_config saya jadi tidak ada bantuan. pastikan nama host ssh BUKAN sama dengan nama host mysql (gunakan localhost).

Di meja kerja, pilih + untuk menambahkan koneksi baru dan atur yang berikut:

  • metode koneksi: standar TCP / IP melalui SSH
  • Nama Host SSH: 192.168.0.50:22 (tempatkan server dan port SSH server jarak jauh (opsional))
  • Nama Pengguna SSH: sshuser
  • Anda dapat mengatur kata sandi atau menambahkan saat diminta
  • Nama Host MYSQL: localhost atau 127.0.0.1
  • Port MYSQL Server: 3306
  • Anda dapat mengatur kata sandi atau menambahkan saat diminta

Tes koneksi. Itu harus berhasil kemudian tekan OK.Viola!

Mulai Ochora
sumber
1

Terkadang kunci yang dibuat oleh Putty tidak akan berfungsi. Gunakan ssh-keygen pada kotak Linux untuk membuat pasangan kunci. Salin konten id_rsa baru ke file teks pada Windows. Pastikan untuk menambahkan konten id_rsa.pub ke otor_keys di kotak Linux. Semua default lain di Workbench baik-baik saja termasuk 127.0.0.1 untuk Nama Host MySQL. Tentu saja harus Standar TCP / IP melalui SSH.

mcmacerson
sumber
1

Saya menemukan kesalahan yang sama. Masalahnya adalah "agak" batas waktu. Saya menghidupkan nilai bahkan hingga 120 detik yang tidak membantu.

Dalam kasus saya, saya bisa menyelesaikannya dengan melakukan nslookup myserver.com dan menggunakan alamat IP alih-alih nama host. Asumsi saya adalah masalah saat mencoba terhubung dari IPv4 ke IPv6.

Markus Zeller
sumber
0

Baru saja mengalami masalah yang sama pada mesin Ubuntu yang terhubung ke server yang menjalankan versi MySQL 5.5.29 dan MySQL Workbench 5.2.40. Server SSH membutuhkan penggunaan ssh-key.

Saya tidak dapat terhubung ke server MySQL menggunakan pengguna root, sebaliknya saya harus membuat pengguna non-root terpisah untuk digunakan untuk login. Setelah itu saya bisa terhubung dengan baik.

Semoga ini membantu.

Kyle Coots
sumber
0

OK, saya tahu ini adalah pertanyaan lama, tapi saya mencabut rambut saya selama berjam-jam. Saya memeriksa semua yang disebutkan oleh Bruno dan Eye dan semuanya tampak bagus. Kemudian saya menyadari bahwa itu benar-benar kunci pribadi / publik. Jadi saya menyalakan Pageant dan menambahkan kunci pribadi saya, sehingga itu membuat kunci publik yang bisa dibaca oleh MySQL Workbench dan voila, terhubung! (Itu sebenarnya semacam antiklimaks ketika MySQL Workbench benar-benar mulai bekerja, tetapi dengan cara yang bahagia.)

TLDR: Gunakan Pageant untuk menghasilkan kunci publik dari kunci pribadi Anda.

Bonnie
sumber
Kunci pribadi tidak boleh digunakan sebagai kunci publik, itulah sebabnya kunci pribadi.
James Anderson
@ JamesAnderson bukankah itu yang dimaksud dengan bug ? Teks meminta pribadi, harus dibaca publik ... setidaknya sesuai dengan tautan bug. Atau tidak?
Thufir
-1

Hanya apa yang saya temukan ... sering saya membuat pengguna di server SSH tanpa shell (seperti / sbin / nologin) untuk mencegah mereka dapat masuk ke server dan membuat file dan lain-lain di sana ... (untuk sistem produksi kami sedang melakukannya di firewall).

Di lingkungan Linux biasa setelah itu, Anda masih bisa meneruskan port setelah itu seperti:

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

dan setelah itu terhubung ke sana dari workstation lokal sebagai:

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

Tapi workbench memberikan kesalahan yang tidak bisa terhubung ke MySQL ... Jika Anda akan mengubah shell untuk pengguna itu, katakanlah, / bin / bash - semuanya berfungsi dengan baik setelah itu.

Tidak tahu mengapa Workbench membutuhkan shell lokal di server SSH jarak jauh.

pengguna251897
sumber
-1

Cukup buat kunci RSA baru dengan format yang benar untuk meja kerja mysql.

Sebagai contoh:

ssh-keygen -t rsa -b 4096 -C "[email protected]"
akan akan
sumber