กำลังพยายามใช้ MySQL Workbench กับ TCP / IP ผ่าน SSH - ล้มเหลวในการเชื่อมต่อ


41

ฉันไม่สามารถเชื่อมต่อโดยใช้ TCP / IP ผ่านการเชื่อมต่อ SSH ใน MySQL Workbench จากพีซี เกิดอะไรขึ้น?

ฉันสร้าง MySQL 5.1 ฐานข้อมูลบนเซิร์ฟเวอร์ Ubuntu mysql.myhost.com ฉันสามารถเข้าถึงได้ในเครื่อง MySQL Workbench (PC) เสนอการเชื่อมต่อผ่าน TCP ผ่าน ssh มันทำงานบนพอร์ต 3306 บนเซิร์ฟเวอร์ระยะไกลที่ mysql บรรทัดคำสั่งทำงานได้ดี

ฉันใช้รายละเอียดเซสชันต่อไปนี้:

  • วิธีการเชื่อมต่อ: TCP / IP ผ่าน SSH
  • ชื่อโฮสต์ SSH: mysql.myhost.com : 3306
  • ชื่อผู้ใช้ SSH: ล็อกอิน linux ของฉัน
  • ไฟล์กุญแจสาธารณะ SSH: ไฟล์กุญแจสาธารณะในพื้นที่ของฉัน
  • ชื่อโฮสต์ MySQL: 127.0.0.1 MySQL
  • พอร์ตเซิร์ฟเวอร์: 3306
  • ชื่อผู้ใช้: ราก

ฉันได้รับข้อความแสดงข้อผิดพลาดเมื่อพยายามเชื่อมต่อ: "ไม่สามารถเชื่อมต่อกับ MySQL ที่ 127.0.0.1:3306 ผ่าน SSH tunnel ที่ mysql.myhost.com พร้อมรูทผู้ใช้"

"ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL บน '127.0.0.1' (10061)"

เป็นการทดสอบอื่น - ฉันตั้งค่าอุโมงค์ SSH ด้วยพอร์ต 3306 โดยใช้ Putty และฉันสามารถเชื่อมต่อตกลงโดยใช้ MySQL Workbench ผ่านอุโมงค์นั้นซึ่งส่งต่อการเชื่อมต่อไปยัง 3306 ท้องถิ่นของฉันไปยังเซิร์ฟเวอร์ระยะไกลตามที่อธิบายไว้ข้างต้น แต่ฉันไม่สามารถรับ "TCP / IP ผ่าน SSH" ทำงานใน Workbench ได้

คำถามรอง: เมื่อ Workbench ถามหา "ไฟล์สาธารณะคีย์พา ธ SSH" ไม่จำเป็นต้องใช้ไฟล์กุญแจส่วนตัวจริงเหรอ?


4
ความเศร้าโศกที่ดี bugs.mysql.com/bug.php?id=61368แสดงว่าเป็นไฟล์คีย์ส่วนตัวที่จำเป็นในรูปแบบ OpenSSH ฉันสงสัยเกี่ยวกับเรื่องนี้ แต่ก็ไม่แน่ใจ
Dizzley

คำตอบ:


29

ฉันสะดุดกับคำถามนี้เมื่อฉันพบข้อผิดพลาดนี้เอง ในที่สุดฉันก็สามารถกำหนดค่าได้

  1. ฉันไม่ได้แตะอะไรเลยใน /etc/mysql/my.cnf ซึ่งมี bind_address = 127.0.0.1 อยู่แล้ว ดังนั้น localhost เท่านั้นที่สามารถเชื่อมต่อได้
  2. ฉันใช้เซิร์ฟเวอร์ OpenSSH ดังนั้นในไฟล์ config ของ / etc / SSH / sshd_config ผมเปลี่ยนจากไม่มีการใช่พระรามที่รับผิดชอบในการส่งต่อ TCP จึงAllowTcpForwarding ใช่
  3. ในที่สุดฉันมีดังต่อไปนี้ป้อนใน MySQL WorkBench

    • ชื่อโฮสต์ SSH: 192.168.0.8:22 (เซิร์ฟเวอร์ SSH ของฉันฟังพอร์ต 22)
    • ชื่อผู้ใช้ SSH: sshuser
    • ไฟล์คีย์ SSH: * C: \ Users \ windowsuser \ .ssh \ id_rsa * (ควรเป็นคีย์ส่วนตัวแม้ว่ามันจะบอกว่าเป็นสาธารณะ)
    • ชื่อโฮสต์ MySQL: 127.0.0.1 (สิ่งนี้ไม่ควรเปลี่ยนแปลงเนื่องจากเซิร์ฟเวอร์ MySQL โดยค่าเริ่มต้นถูกผูกไว้กับ localhost เท่านั้นซึ่งฉันไม่ได้เปลี่ยน)
    • พอร์ตเซิร์ฟเวอร์ MySQL: 3306 (เช่นค่าเริ่มต้น)
    • ชื่อผู้ใช้: ราก

สิ่งเดียวที่เหลืออยู่สำหรับคุณคือการกำหนดค่าเซิร์ฟเวอร์ SSH ของคุณให้ทำงานอย่างถูกต้องเพื่อใช้คีย์มากกว่ารหัสผ่าน หวังว่านี่จะช่วยใครซักคน


สิ่งหนึ่งที่ฉันต้องทำในฝั่งเซิร์ฟเวอร์คือเพื่อให้แน่ใจว่า / etc / ssh / sshd_config มีบรรทัดนี้: AuthorizedKeysFile /home/root/.ssh/authorized_keysและที่ authorized_keys มีกุญแจสาธารณะของฉันเป็นรายการ
RyanNerd

โปรดอธิบายว่าขั้นตอนที่ 2 ชุดAllowTcpForwarding yesใดที่ใช้กับเซิร์ฟเวอร์ระยะไกลเช่นโฮสต์ที่มีอินสแตนซ์ MySQL ที่เรากำลังพยายามเชื่อมต่อ หรือเครื่องท้องถิ่นที่ติดตั้ง MySQL Workbench
Nam G VU

@NamGVU ขั้นตอนที่ 2 ใช้กับรีโมตเซิร์ฟเวอร์ที่ติดตั้ง MySQL โดยเฉพาะอย่างยิ่งเซิร์ฟเวอร์ OpenSSH ที่ให้ช่องสัญญาณไปยัง MySQL ผ่าน SSH
ตา

ฉันพยายาม แต่ก็ยังไม่ผ่านอุโมงค์ MySQL Workbench บอกให้ฉันอ่านรายละเอียดข้อผิดพลาดเพิ่มเติมในล็อกไฟล์ คุณรู้ไหมว่าจะอ่านที่ไหนดี?
Nam G VU

1
ฉันได้มันทำงานวันนี้ - ต้องรีบูตหลังจากกำหนดค่าAllowTcpForwardingรายการ
Nam G VU

8

ฉันคิดว่า TCP / IP ผ่านวิธี SSH ทำงานได้โดยการสร้างการเชื่อมต่อ "ปกติ" SSH ที่รองรับการเชื่อมต่อ MySQL (เช่นเดียวกับที่คุณใช้-Lในการสร้างช่องสัญญาณกับไคลเอนต์บรรทัดคำสั่ง OpenSSH)

ดังนั้นคุณจะต้องระบุการเชื่อมต่อกับเซิร์ฟเวอร์ SSH บนเซิร์ฟเวอร์ซึ่งคุณกำลังสร้างช่องสัญญาณ ดูเหมือนmysql.myhost.com:3306ว่าคุณกำลังใช้งานอยู่ซึ่งหมายความว่าคุณกำลังใช้เซิร์ฟเวอร์ SSH นี้ (ไม่ใช่ MySQL) ที่พอร์ต 3306

เป็นไปได้ที่จะผูกเซิร์ฟเวอร์ MySQL ที่ 127.0.0.1:3306 และเซิร์ฟเวอร์ SSH ที่อยู่ IP ภายนอกของคุณสำหรับmysql.myhost.comบนพอร์ต 3306 แต่นั่นไม่น่าเป็นไปได้ ฉันเดาว่าเซิร์ฟเวอร์ SSH ของคุณกำลังฟังพอร์ต 22 (ค่าเริ่มต้น)

mysql.myhost.com:22คุณอาจจะใช้ (ตรวจสอบว่าคุณสามารถเชื่อมต่อผ่านไคลเอนต์ SSH ปกติเช่น Putty ได้เช่นกัน)


8

คุณอาจต้องตรวจสอบผู้ใช้ในตาราง mysql.user

เรียกใช้แบบสอบถามนี้:

SELECT user,host FROM mysql.user;

คุณควรเห็นสิ่งนี้:

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)

โปรดสังเกตว่า

  • root @ localhost สามารถล็อกอินจาก localhost เท่านั้น
  • ping @ '%' สามารถเข้าสู่ระบบผ่าน TCP / IP
  • admin@10.67.135.% สามารถเข้าสู่ระบบผ่าน TCP / IP จาก netblock นั้นเท่านั้น
  • icorbin@10.67.135.% สามารถเข้าสู่ระบบผ่าน TCP / IP จาก netblock นั้นเท่านั้น

หากคุณต้องการรูทเพื่อเชื่อมต่อผ่าน TCP / IP คุณต้องระบุที่อยู่ IP หรือ netblock สำหรับผู้ใช้รูท

บางสิ่งเช่นนี้

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

หรือถ้ารหัสผ่านรูทเหมือนกันสำหรับ root @ localhost

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

CAVEAT: ไม่แนะนำให้รูท @ '%' อาจลองใช้ root@'10.% 'หรือ netblock อื่น ๆ เพื่อหารูท

ให้มันลอง !!!


3
ไม่ควร...@localhostทำงานผ่านอุโมงค์ SSH เนื่องจากเท่าที่เกี่ยวข้องกับเซิร์ฟเวอร์ MySQL การเชื่อมต่อมาจากปลายอุโมงค์
Bruno

@Bruno: วิธีหนึ่งที่จะรู้คือการเชื่อมต่อให้สำเร็จจากนั้นเรียกใช้ SELECT USER (), CURRENT_USER (); และดูสิ่งที่มันออกมา ฟังก์ชัน USER () สะท้อนสิ่งที่คุณพยายามพิสูจน์ตัวตนเป็นขณะที่ CURRENT_USER () แสดงสิ่งที่ MySQL อนุญาตให้คุณตรวจสอบสิทธิ์ได้ หาก CURRENT_USER () echoes root @ localhost แสดงว่าคำตอบสำหรับคำถามของคุณคือใช่
RolandoMySQLDBA

3

คุณอาจใช้ MySQL Workbench รุ่นเก่ากว่าและจำเป็นต้องอัปเดต นี่เป็นข้อบกพร่องในรุ่น 6.0.8 ซึ่งปัจจุบันเป็นรุ่นในที่เก็บของ Ubuntu การอัปเดตเป็นเวอร์ชัน 6.3.6 ได้แก้ไขสิ่งนี้สำหรับฉัน

ดาวน์โหลดได้ที่นี่: http://dev.mysql.com/downloads/workbench/#downloads


2

สิ่งหนึ่งที่ไม่ได้กล่าวถึงในคำตอบอื่น ๆ คือความสำคัญของรูปแบบ OpenSSH สำหรับคีย์ตามที่ระบุไว้ใน SO ( https://stackoverflow.com/questions/34504232/mysql-workbench-failing-to-connect-via- ssh-due-to-key / 38108623 # 38108623 )

แม้จะมีคำตอบอยู่ที่นั่น แต่ฉันสามารถใช้รหัสป้องกันด้วยรหัสผ่านกับ MySQL Workbench 6.3.7 (64 บิต, Windows 10)


2

ปัญหาของฉันเกิดจากความจริงที่ว่าฉันกำลังพยายามใช้ed25519คีย์ SSH ฉันสังเกตเห็นข้อผิดพลาดนี้บนเซิร์ฟเวอร์ SSH ในauth.log:

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

เมื่อฉันเปลี่ยนไปใช้คีย์ RSA ทุกอย่างทำงานได้อย่างที่คาดไว้


1

คุณกำลังพยายามเชื่อมต่อกับเซิร์ฟเวอร์ผ่าน ssh แต่ใช้พอร์ต mysql พอร์ตที่คุณต้องการคือสิ่งที่เซิร์ฟเวอร์ ssh ของคุณกำลังรับฟังโดยทั่วไปคือ 22 จากนั้น localhost และ 3306 สำหรับชื่อโฮสต์และพอร์ต mysql


1

ฉันประสบปัญหาเดียวกัน ฉันตรวจสอบและพยายามตั้งค่าAllowTcpForwarding ใช่แต่มันหายไปใน sshd_config ของฉันดังนั้นจึงไม่มีความช่วยเหลือ ตรวจสอบให้แน่ใจว่าชื่อโฮสต์ ssh ไม่เหมือนกันกับชื่อโฮสต์ mysql (ใช้ localhost)

ใน workbench เลือก + เพื่อเพิ่มการเชื่อมต่อใหม่และตั้งค่าต่อไปนี้:

  • วิธีการเชื่อมต่อ: TCP / IP มาตรฐานผ่าน SSH
  • SSH ชื่อโฮสต์: 192.168.0.50:22 (วาง IP เซิร์ฟเวอร์ SSH ระยะไกลและพอร์ต (ตัวเลือก))
  • ชื่อผู้ใช้ SSH: sshuser
  • คุณสามารถตั้งรหัสผ่านหรือเพิ่มได้ที่พรอมต์
  • ชื่อโฮสต์ MYSQL: localhost หรือ 127.0.0.1
  • พอร์ตเซิร์ฟเวอร์ MYSQL: 3306
  • คุณสามารถตั้งรหัสผ่านหรือเพิ่มได้ที่พรอมต์

ทดสอบการเชื่อมต่อ มันควรจะประสบความสำเร็จแล้วกด OK.Viola!


1

บางครั้งคีย์ที่สร้างโดย PuTTY จะไม่ทำงาน ใช้ ssh-keygen บนกล่อง Linux เพื่อสร้างคู่ของคีย์ คัดลอกเนื้อหาของid_rsaใหม่ไปยังไฟล์ข้อความบน Windows ตรวจสอบให้แน่ใจว่าได้เพิ่มเนื้อหาของ id_rsa.pub ไปที่ authorized_keys บนกล่อง Linux ค่าเริ่มต้นอื่น ๆ ใน Workbench นั้นใช้ได้รวมถึง 127.0.0.1 สำหรับชื่อโฮสต์ MySQL แน่นอนว่าต้องเป็น Standard TCP / IP ผ่าน SSH


1

ฉันพบข้อผิดพลาดเดียวกัน ปัญหาคือ "ค่อนข้าง" หมดเวลา ฉัน cranked แม้แต่ค่าสูงสุด 120 วินาทีซึ่งไม่ได้ช่วย

ในกรณีของฉันฉันสามารถแก้ปัญหาได้ด้วยการทำ nslookup myserver.com และใช้ที่อยู่ IP แทนชื่อโฮสต์ สมมติฐานของฉันเป็นปัญหาพยายามเชื่อมต่อจาก IPv4 กับ IPv6


0

เพิ่งมีปัญหาเดียวกันนี้ในเครื่อง Ubuntu ที่เชื่อมต่อกับเซิร์ฟเวอร์ที่ใช้ MySQL เวอร์ชัน 5.5.29 และ MySQL Workbench 5.2.40 เซิร์ฟเวอร์ SSH ต้องการการใช้ ssh-key

ฉันไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL โดยใช้ผู้ใช้รูทได้ แต่ฉันต้องสร้างผู้ใช้ที่ไม่ใช่รูทแยกต่างหากเพื่อใช้สำหรับการเข้าสู่ระบบ หลังจากนั้นฉันก็สามารถเชื่อมต่อได้ดี

หวังว่านี่จะช่วยได้


0

ตกลงฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันดึงผมออกไปนานหลายชั่วโมง ฉันตรวจสอบทุกอย่างที่พูดถึงโดย Bruno และ Eye และทุกอย่างดูดี จากนั้นฉันก็รู้ว่ามันเป็นกุญแจส่วนตัว / สาธารณะ ดังนั้นฉันจึงยิง Pageant และเพิ่มคีย์ส่วนตัวของฉันเพื่อที่จะสร้างคีย์สาธารณะที่ MySQL Workbench สามารถอ่านและเชื่อมต่อได้! (อันที่จริงแล้วมันก็ค่อนข้างจะต่อต้านการเสื่อมสภาพเมื่อ MySQL Workbench เริ่มทำงานจริง แต่ก็มีความสุข)

TLDR: ใช้การประกวดเพื่อสร้างกุญแจสาธารณะจากกุญแจส่วนตัวของคุณ


ไม่ควรใช้คีย์ส่วนตัวเป็นกุญแจสาธารณะนั่นคือสาเหตุที่ทำให้พวกเขาเป็นส่วนตัว
James Anderson

@JamesAnderson นั่นไม่ใช่ข้อผิดพลาดหรือเปล่า ข้อความกำลังขอความเป็นส่วนตัวควรอ่านเป็นสาธารณะ ... อย่างน้อยตามลิงก์ข้อผิดพลาด หรือไม่?
Thufir

-1

สิ่งที่ฉันพบ ... บ่อยครั้งที่ฉันสร้างผู้ใช้บนเซิร์ฟเวอร์ SSH ที่ไม่มีเชลล์ (เช่น / sbin / nologin) เพื่อป้องกันไม่ให้พวกเขาสามารถเข้าสู่เซิร์ฟเวอร์และสร้างไฟล์และอื่น ๆ ที่นั่น ... (สำหรับระบบที่ใช้งานจริงเรา กำลังทำกับไฟร์วอลล์)

ในสภาพแวดล้อม Linux ปกติหลังจากนั้นคุณยังสามารถส่งต่อพอร์ตหลังจากนั้นเช่น:

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

และหลังจากนั้นเชื่อมต่อกับมันจากเวิร์กสเตชันท้องถิ่นเป็น:

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

แต่ workbench ให้ข้อผิดพลาดที่ไม่สามารถเชื่อมต่อกับ MySQL ... หากคุณจะเปลี่ยนเชลล์สำหรับผู้ใช้นั้นให้พูด / bin / bash - ทุกอย่างทำงานได้ดีหลังจากนั้น

ไม่ทราบว่าเหตุใด Workbench จึงต้องการเชลล์โลคัลบนเซิร์ฟเวอร์ SSH ระยะไกล


-1

เพียงแค่สร้างคีย์ RSA ใหม่ที่มีรูปแบบที่ถูกต้องกับ mysql workbench

ตัวอย่างเช่น:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.