Cố gắng sử dụng MySQL Workbench với TCP / IP qua SSH - không thể kết nối


41

Tôi không thể kết nối bằng TCP / IP qua kết nối SSH trong MySQL Workbench từ PC. Chuyện gì đang xảy ra vậy?

Tôi đã tạo một cơ sở dữ liệu MySQL 5.1 trên máy chủ Ubuntu mysql.myhost.com . Tôi có thể truy cập nó tại địa phương. MySQL Workbench (PC) cung cấp kết nối qua TCP qua ssh. Nó chạy trên cổng 3306 trên máy chủ từ xa nơi mysql dòng lệnh hoạt động tốt.

Tôi đã sử dụng các chi tiết phiên sau:

  • Phương thức kết nối: TCP / IP qua SSH.
  • Tên máy chủ SSH: mysql.myhost.com : 3306
  • Tên người dùng SSH: đăng nhập linux của tôi
  • Tệp khóa công khai SSH: tệp khóa công khai cục bộ của tôi
  • Tên máy chủ MySQL: 127.0.0.1 MySQL
  • Cổng máy chủ: 3306
  • Tên đăng nhập: root

Tôi nhận được thông báo lỗi khi tôi cố gắng kết nối: "Không thể kết nối với MySQL tại 127.0.0.1:3306 thông qua đường hầm SSH tại mysql.myhost.com với người dùng root"

"Không thể kết nối với máy chủ MySQL trên '127.0.0.1' (10061)"

Như một thử nghiệm khác - Tôi đã thiết lập một đường hầm SSH với cổng 3306 bằng cách sử dụng Putty và tôi có thể kết nối OK bằng MySQL Workbench thông qua đường hầm đó để chuyển các kết nối đến 3306 cục bộ của tôi đến máy chủ từ xa như được mô tả ở trên. Nhưng tôi không thể để "TCP / IP qua SSH" hoạt động trong Workbench.

Câu hỏi phụ: khi Workbench yêu cầu "Đường dẫn đến tệp khóa công khai SSH" không thực sự cần tệp khóa riêng của tôi?


4
Tốt đau buồn. bug.mysql.com/orms.php?id=61368 cho thấy đây là tệp khóa RIÊNG TƯ cần thiết ở định dạng OpenSSH. Tôi tự hỏi về điều đó nhưng không chắc chắn.
Dizzley

Câu trả lời:


29

Tôi vấp phải câu hỏi này khi bản thân tôi đã gặp phải lỗi này. Cuối cùng tôi cũng có thể tìm ra cấu hình.

  1. Tôi đã không chạm vào bất cứ thứ gì trong /etc/mysql/my.cnf đã có bind_address = 127.0.0.1. Vì vậy, chỉ có localhost có thể kết nối.
  2. Tôi sử dụng máy chủ OpenSSH. Vì vậy, trong tập tin cấu hình của nó / etc / ssh / sshd_config tôi đã thay đổi từ không thành , param chịu trách nhiệm chuyển tiếp TCP, do đó AllowTcpForwarding có .
  3. Cuối cùng tôi có phần sau đây được nhập vào MySQL WorkBench.

    • Tên máy chủ SSH: 192.168.0.8:22 (máy chủ SSH của tôi lắng nghe cổng 22)
    • Tên người dùng SSH: sshuser
    • Tệp khóa SSH: * C: \ Users \ windowsuser \ .ssh \ id_rsa * (phải là khóa riêng tư, mặc dù nó nói công khai)
    • Tên máy chủ MySQL: 127.0.0.1 (điều này không nên thay đổi, vì máy chủ MySQL theo mặc định chỉ bị ràng buộc với localhost mà tôi không thay đổi)
    • Cổng máy chủ MySQL: 3306 (cũng mặc định)
    • Tên đăng nhập: root

Điều duy nhất còn lại cho bạn là cấu hình chính xác máy chủ SSH của bạn để hoạt động với các khóa thay vì mật khẩu. Hy vọng điều này sẽ giúp được ai đó.


Một điều tôi cần làm ở phía máy chủ là đảm bảo / etc / ssh / sshd_config có dòng này: AuthorizedKeysFile /home/root/.ssh/authorized_keysvà ủy quyền có khóa PUBLIC của tôi làm mục nhập.
RyanNerd

Vui lòng làm rõ nếu bước 2 được thiết lập AllowTcpForwarding yescho máy chủ từ xa, tức là máy chủ có phiên bản MySQL mà chúng tôi đang cố gắng kết nối; hoặc máy cục bộ đã cài đặt MySQL Workbench
Nam G VU

@NamGVU bước 2 áp dụng cho máy chủ từ xa nơi cài đặt MySQL. Riêng máy chủ OpenSSH cung cấp đường hầm cho MySQL thông qua SSH.
Mắt

Tôi đã thử nhưng vẫn không thành công. MySQL Workbench bảo tôi đọc thêm chi tiết lỗi trong tệp nhật ký. Bạn có thể biết nơi để đọc?
Nam G VU

1
Tôi đã làm cho nó hoạt động ngày hôm nay - cần khởi động lại sau khi định cấu hình AllowTcpForwardingmục nhập
Nam G VU

8

Tôi nghĩ rằng cách tiếp cận TCP / IP qua SSH hoạt động bằng cách thiết lập kết nối SSH "bình thường" bên dưới kết nối MySQL (giống như cách bạn sử dụng -Lvới máy khách dòng lệnh OpenSSH).

Do đó, bạn cần chỉ định kết nối đến máy chủ SSH trên máy chủ mà bạn đang thiết lập đường hầm. Ở đây, dường như bạn đang sử dụng mysql.myhost.com:3306, điều này có nghĩa là bạn đang chạy máy chủ SSH này (không phải MySQL) trên cổng 3306.

Có thể liên kết máy chủ MySQL trên 127.0.0.1:3306 và máy chủ SSH trên địa chỉ IP bên ngoài của bạn mysql.myhost.comtrên cổng 3306, nhưng điều đó rất khó xảy ra. Tôi đoán máy chủ SSH của bạn đang lắng nghe trên cổng 22 (mặc định).

Bạn có lẽ nên sử dụng mysql.myhost.com:22. (Kiểm tra xem bạn có thể kết nối với nó thông qua ứng dụng SSH thông thường như Putty không.)


8

Bạn có thể cần kiểm tra người dùng trong bảng mysql.user.

Chạy truy vấn này:

SELECT user,host FROM mysql.user;

Bạn sẽ thấy một cái gì đó như thế này:

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)

Xin hãy chú ý đến nó

  • root @ localhost chỉ có thể đăng nhập từ localhost.
  • ping @ '%' có thể đăng nhập qua TCP / IP
  • admin@10.67.135.% chỉ có thể đăng nhập qua TCP / IP từ netblock đó
  • icorbin@10.67.135.% chỉ có thể đăng nhập qua TCP / IP từ netblock đó

Nếu bạn muốn root kết nối qua TCP / IP, bạn phải chỉ định địa chỉ IP hoặc netblock cho người dùng root.

Một cái gì đó như thế này:

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

hoặc nếu mật khẩu gốc giống với root @ localhost thì

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

CAVEAT: root @ '%' không được khuyến nghị. Có thể thử root@'10.% 'hoặc bất kỳ netblock nào khác cho root.

Hãy thử một lần !!!


3
Không nên ...@localhosthoạt động thông qua đường hầm SSH, vì có liên quan đến máy chủ MySQL, kết nối đến từ cuối đường hầm?
Bruno

@Bruno: Một cách chắc chắn cần biết là kết nối thành công và sau đó chạy CHỌN NGƯỜI DÙNG (), CURRENT_USER (); và xem những gì nó đầu ra. Hàm USER () lặp lại những gì bạn đã cố xác thực là, trong khi CURRENT_USER () lặp lại những gì MySQL cho phép bạn xác thực là. Nếu CURRENT_USER () lặp lại root @ localhost, thì câu trả lời cho câu hỏi của bạn là có.
RolandoMySQLDBA

3

Bạn có thể đang sử dụng phiên bản cũ hơn của MySQL Workbench và cần cập nhật. Đây là một lỗi trong phiên bản 6.0.8, hiện là phiên bản trong kho Ubuntu. Cập nhật lên phiên bản 6.3.6 đã sửa lỗi này cho tôi.

Tải xuống tại đây: http://dev.mysql.com/doads/workbench/#doads


2

Một điều không được đề cập trong bất kỳ câu trả lời nào khác là tầm quan trọng của định dạng OpenSSH đối với khóa như đã nêu trên SO ( https://stackoverflow.com/questions 432504232 / mysql-workbench-failing-to -connect-via- ssh-do-to-key / 38108623 # 38108623 ).

Bất chấp câu trả lời ở đó, tôi đã có thể sử dụng khóa được bảo vệ bằng mật khẩu với MySQL Workbench 6.3.7 (64 bit, Windows 10).


2

Vấn đề của tôi là do tôi đã cố gắng sử dụng ed25519khóa SSH. Tôi nhận thấy lỗi này trên máy chủ SSH trong auth.log:

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

Khi tôi chuyển sang sử dụng khóa RSA, mọi thứ sẽ hoạt động như mong đợi.


1

Bạn đang cố gắng kết nối với máy chủ thông qua ssh nhưng sử dụng cổng mysql. Cổng bạn muốn là bất cứ thứ gì mà máy chủ ssh của bạn đang nghe, thường là 22, sau đó là localhost và 3306 cho tên máy chủ và cổng mysql.


1

Tôi phải đối mặt với cùng một vấn đề. Tôi đã kiểm tra và cố gắng đặt AllowTcpForwarding Có nhưng nó bị thiếu trong sshd_config của tôi nên không giúp được gì. đảm bảo tên máy chủ ssh KHÔNG giống với tên máy chủ mysql (sử dụng localhost).

Trong bàn làm việc, chọn + để thêm kết nối mới và đặt như sau:

  • phương thức kết nối: TCP / IP tiêu chuẩn qua SSH
  • Tên máy chủ SSH: 192.168.0.50:22 (đặt IP và cổng máy chủ SSH từ xa (tùy chọn))
  • Tên người dùng SSH: sshuser
  • Bạn có thể đặt mật khẩu hoặc thêm tại dấu nhắc
  • Tên máy chủ MYSQL: localhost hoặc 127.0.0.1
  • Cổng máy chủ MYSQL: 3306
  • Bạn có thể đặt mật khẩu hoặc thêm tại dấu nhắc

Kiểm tra kết nối. Nó sẽ thành công sau đó nhấn OK.Viola!


1

Đôi khi các khóa được tạo bởi PuTTY sẽ không hoạt động. Sử dụng ssh-keygen trên hộp Linux để tạo một cặp khóa. Sao chép nội dung của id_rsa mới vào tệp văn bản trên Windows. Đảm bảo thêm nội dung của id_rsa.pub vào ủy quyền_key trên hộp Linux. Tất cả các giá trị mặc định khác trong Workbench đều ổn, bao gồm 127.0.0.1 cho Tên máy chủ MySQL. Tất nhiên nó phải là TCP / IP tiêu chuẩn trên SSH.


1

Tôi đã đưa ra cùng một lỗi. Vấn đề là "phần nào" thời gian chờ. Tôi đã quay vòng ngay cả giá trị lên tới 120 giây mà không giúp được gì.

Trong trường hợp của tôi, tôi có thể giải quyết nó bằng cách sử dụng myserver.com nslookup và sử dụng địa chỉ IP thay vì tên máy chủ. Giả định của tôi là một vấn đề khi cố gắng kết nối từ IPv4 sang IPv6.


0

Chỉ có vấn đề tương tự trên máy Ubuntu kết nối với máy chủ chạy phiên bản MySQL 5.5,29 và MySQL Workbench 5.2.40. Máy chủ SSH yêu cầu sử dụng khóa ssh.

Tôi không thể kết nối với máy chủ MySQL bằng người dùng root, thay vào đó tôi phải tạo một người dùng không phải root riêng để sử dụng cho đăng nhập. Sau đó tôi đã có thể kết nối tốt.

Hi vọng điêu nay co ich.


0

OK, tôi biết đây là một câu hỏi cũ, nhưng tôi đã nhổ tóc ra hàng giờ. Tôi đã kiểm tra mọi thứ được đề cập bởi Bruno và Eye và tất cả có vẻ tốt. Sau đó, tôi nhận ra nó thực sự là một điều riêng tư / công khai. Vì vậy, tôi đã kích hoạt Pagete và thêm khóa riêng của mình, để nó tạo ra một khóa công khai mà MySQL Workbench có thể đọc và voila, được kết nối! (Nó thực sự là một loại phản đạo đức khi MySQL Workbench thực sự bắt đầu hoạt động, nhưng theo một cách hạnh phúc.)

TLDR: Sử dụng Pagete để tạo khóa chung từ khóa riêng của bạn.


Khóa riêng không bao giờ được sử dụng làm khóa chung đó là lý do tại sao chúng là riêng tư.
James Anderson

@JamesAnderson không phải là lỗi gì? Văn bản đang yêu cầu riêng tư, nó nên đọc công khai ... ít nhất là theo liên kết lỗi. Hay không?
Thufir

-1

Chỉ những gì tôi tìm thấy ... thường là tôi đang tạo người dùng trên máy chủ SSH không có shell (chẳng hạn như / sbin / nologin) để ngăn họ có thể đăng nhập vào máy chủ và tạo tệp, v.v. (đối với các hệ thống sản xuất, chúng tôi đang làm điều đó trên tường lửa).

Trong môi trường Linux thông thường sau đó, bạn vẫn có thể chuyển tiếp các cổng sau đó, chẳng hạn như:

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

và sau đó kết nối với nó từ máy trạm cục bộ như:

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

Nhưng bàn làm việc đưa ra một lỗi mà nó không thể kết nối với MySQL ... Nếu bạn sẽ thay đổi trình bao cho người dùng đó thành, giả sử, / bin / bash - mọi thứ sẽ hoạt động tốt sau đó.

Không biết tại sao Workbench lại yêu cầu shell cục bộ trên máy chủ SSH từ xa.


-1

Chỉ cần tạo khóa RSA mới với định dạng chính xác cho bàn làm việc mysql.

Ví dụ:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.