ไม่สามารถเชื่อมต่อกับฐานข้อมูล MySQL ผ่าน SSH ด้วย Workbench


10

ฉันกำลังพยายามเชื่อมต่อกับฐานข้อมูลของฉันผ่านทาง SSH tunneling จากหนึ่งในเว็บแอพเซิร์ฟเวอร์ของเราด้วย MySQL Workbench นี่คือการตั้งค่าพื้นฐาน โปรดทราบว่าฉันเปลี่ยนค่าบางอย่างในภาพหน้าจอเพื่อเหตุผลด้านความปลอดภัย

ภาพหน้าจอของ Workbench

ปัญหาคือทุกครั้งที่ฉันพยายามเชื่อมต่อผ่านอุโมงค์ SSH จากหนึ่งในเซิร์ฟเวอร์แอปของเราฉันได้รับข้อผิดพลาดดังต่อไปนี้:

ไม่สามารถเชื่อมต่อกับ us-east-1.amazonaws.com ผ่านอุโมงค์ SSH ที่ computer.amazonaws.com กับผู้ใช้ social_shop_prod ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ใน 127.0.0.1

อย่างไรก็ตามหากฉันใช้ข้อมูลรับรองเดียวกันกับ SSH ผ่านบรรทัดคำสั่งต่อไปนี้:

mysql -u social_shop_prod -h us-east-1.amazonaws.com -p

ฉันสามารถเชื่อมต่อได้สำเร็จและรับพรอมต์คำสั่งแบบโต้ตอบ MySQL

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

และทำไมจึงพยายามเชื่อมต่อมากกว่า 127.0.0.1 ฉันไม่ได้ระบุในการกำหนดค่า ไม่มีไฟล์โฮสต์ของฉันที่เปลี่ยนเส้นทางโดเมนที่แสดงด้านล่างไปยัง IP นั้น

การป้อนข้อมูลที่สร้างสรรค์ใด ๆ ที่ชื่นชมอย่างมาก

คำตอบ:


5

เมื่อคุณเชื่อมต่อผ่านอุโมงค์ SSH หมายความว่าพอร์ต MySQL 3306 จาก us-east-1.amazonaws.com กำลังเปิดอยู่ในคอมพิวเตอร์ของคุณ ที่อยู่ ip ของคอมพิวเตอร์ของคุณคือ 127.0.0.1 หรือ localhost เมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์ mysql บน us-east-1.amazonaws.com คุณจะเข้าถึงผ่านทาง 127.0.0.1 เช่นคอมพิวเตอร์ของคุณ หากคุณมีอุโมงค์อื่นเปิดอยู่หรือ MySQL ทำงานอยู่บนคอมพิวเตอร์ของคุณอาจเป็นไปได้ว่าเซิร์ฟเวอร์ MySQL ตัวอื่นที่ปฏิเสธการตรวจสอบสิทธิ์ของคุณ

มีการทดสอบบางอย่างที่คุณสามารถลองได้:

1. คุณใช้ Windows ฟังพอร์ตอะไร

จากพร้อมต์คำสั่ง: netstat -a (แสดงรายการพอร์ตทั้งหมดที่เปิดอยู่)

ใน linux มันจะเป็น: netstat -tlpn

2. การทดสอบการเชื่อมต่อพื้นฐาน

จากพรอมต์คำสั่ง DOS หรือคอนโซล linux: telnet 127.0.0.1 3306

หากคุณหมดเวลาหรือโปรแกรมอื่น ๆ ตอบสนองทันเนลของคุณก็ไม่ได้ตั้งค่าอย่างถูกต้อง

3. เปลี่ยนหมายเลขพอร์ตที่ MySQL Workbench เปิดอยู่ภายในเครื่อง

เราสมมติว่า MySQL workbench กำลังสร้างอุโมงค์บนคอมพิวเตอร์ของคุณ ถ้าเป็นเช่นนั้นใน MySQL workbench ให้ลอง tunneling ผ่านหมายเลขพอร์ตอื่นเช่น 9000

ตรวจสอบให้แน่ใจว่า 9000 ไม่ได้อยู่ในรายการเป็นพอร์ตเปิดจาก: netstat -a

หากคุณมีสิทธิ์เข้าใช้ us-east-1.amazonaws.com

4. ลองเชื่อมต่อกับ MySQL จาก us-east-1.amazonaws.com

mysql -u myuser -h 127.0.0.1 -p

และดังที่ Rolando กล่าวไว้คุณจะต้องยืนยันว่าคุณกำลังเชื่อมต่อกับข้อมูลรับรองที่ถูกต้อง ตัวอย่างเช่นหากคุณกำลังเชื่อมต่อเป็น myuser@127.0.0.1 และคุณมีผู้ใช้ myuser ที่ไม่มีโฮสต์คุณอาจไม่สามารถเชื่อมต่อโดยใช้ user@127.0.0.1


2

สาเหตุที่ 127.0.0.1 กำลังได้รับการติดต่อเนื่องจากช่องสัญญาณเชื่อมต่อพอร์ตในเครื่องท้องถิ่นของคุณกับรีโมตโฮสต์ ดูเหมือนว่าข้อความจะแนะนำว่าไม่ได้ทำการเชื่อมต่อ SSH

ลองสิ่งนี้จากบรรทัดคำสั่ง:

ssh -L 33000:remotehost:3306 user@remotehost

ตรวจสอบให้แน่ใจว่า SSH อนุญาตพอร์ตที่ส่งต่อแล้ว หากคุณได้รับข้อความที่ระบุว่าไม่อนุญาตให้ส่งต่อหรือถูกปฏิเสธนั่นเป็นสาเหตุ

ในการแก้ไขปัญหานี้คุณจะต้องเปลี่ยนการกำหนดค่าเซิร์ฟเวอร์ เพิ่มการกำหนดค่านี้ไปยังเซิร์ฟเวอร์ SSH:

AllowTcpForwarding yes

อย่าลืมรีสตาร์ทเซิร์ฟเวอร์เพื่อเปิดใช้งานการกำหนดค่านี้


คุณอธิบายคำสั่งนั้นหน่อยได้ไหม? คุณผูกที่อยู่หรือไม่ สามารถรวมกับคำสั่ง mysql ได้หรือไม่
Thufir

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

1

ฉันจัดการกับปัญหานี้มาเกือบ 2 สัปดาห์แล้วตอนนี้ฉันจัดการเพื่อตั้งค่า ฉันจะโพสต์ไว้ที่นี่เพื่อให้ผู้คนสามารถลองได้มากขึ้น

ตกลงฉันใช้ OpenSSH (Win10 native) และ Workbench 8

ทีละขั้นตอน:
1. เพิ่มโฮสต์คีย์ SSH ของคุณไปยังตัวแทนโดยใช้ ssh-add
2. สร้างคู่ของคีย์โดยใช้ ssh-keygen ในกรณีของฉันไฟล์เหล่านี้จะไปโดยอัตโนมัติUsers/myUser/.sshตามการกำหนดค่าการติดตั้ง
3. เพิ่มพับลิกคีย์ไปยังไฟล์authorized_keys (ซึ่งต้องอยู่ในพา ธ การติดตั้งเซิร์ฟเวอร์ของคุณในกรณีของฉันWindows/System32/OpenSSH/.ssh) โดยไม่มีส่วนขยาย
4. เพิ่มคีย์ที่สร้างขึ้นที่คุณเพิ่งทำกับเอเจนต์โดยใช้ ssh-add

ขั้นตอนข้างต้นเป็นการตั้งค่าคอนฟิกของบรรทัดคำสั่ง SSH Server ซึ่งฉันคิดว่า OP ได้ทำไว้แล้วสำหรับการเชื่อมต่อของเขาทำงานผ่านเทอร์มินัล ในการกำหนดค่า MySQL Workbench 8 คุณต้องทำสิ่งเดียวกันยกเว้นคุณต้องแปลงไฟล์private_key.pemเป็นรูปแบบ OpenSSH ก่อนที่จะย้ายไปที่Users/myUser/.sshและOpenSSH_instalation_path/.ssh

  1. แปลงprivate_key.pemเป็นรูปแบบ OpenSSH โดยใช้ PUTTYgen
  2. คัดลอกฟิลด์"รหัสสาธารณะสำหรับการวางลงใน OpenSSH authorized_keys"ฟิลด์
  3. บันทึกรหัสสาธารณะในโฟลเดอร์User/myUser/.sshและOpenSSH_instalation_path/.ssh
  4. วางคีย์ที่คุณคัดลอกจาก PUTTY ไปยังไฟล์authorized_keysที่OpenSSH_instalation_path/.sshโฟลเดอร์
  5. การส่งออกที่สำคัญรูปแบบ OpenSSH User/myUser/.sshไป
  6. เริ่มบริการ sshd และ mysql ใหม่
  7. กำหนดค่า Workbench เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ SSH โดยใช้คีย์ส่วนตัวที่แปลงแล้ว

UPDATE: คุณจะต้องตั้งค่าต่อไปนี้ในไฟล์ sshd_config ของคุณ:

PermitRootLogin ที่ไม่มีรหัสผ่าน
PubkeyAuthentication ใช่
PasswordAuthentication no
PermitEmptyPasswords no
AllowTcpForwarding ใช่

กรุณาอ่าน:

ฉันเป็นนักวิเคราะห์ที่ไม่มีประสบการณ์ดังนั้นหากผู้ใช้ขั้นสูงรู้ว่าโฟลเดอร์ใดในสองโฟลเดอร์. ssh เป็นไฟล์ที่ถูกต้องโปรดบอกเรา ฉันพบว่า OpenSSH ค่อนข้างคลุมเครือเกี่ยวกับเรื่องนี้
สิ่งนี้ใช้ได้สำหรับฉันในขณะที่ตั้งค่าสภาพแวดล้อมการพัฒนาในท้องถิ่นโดยใช้ localhost เท่านั้น เพียงเพื่อการเรียนรู้
คุณอาจต้องการเพิ่ม myUser @ localhost ให้กับผู้ใช้งาน MySQL Workbench ก่อนทดสอบการเชื่อมต่อ
หากจำเป็นจริงๆฉันสามารถเพิ่มภาพได้


0

ในกรณีของฉันปัญหาฉันต้องเปลี่ยนกลับไปเป็นชื่อโดเมนหรือ IP ที่ถูกต้องแทนโฮสต์ที่กำหนดเองในพื้นที่ได้รับการแก้ไข

การแก้ปัญหาโฮสต์ที่กำหนดเองล้มเหลว ( /etc/hosts)

ฉันทำงานกับกลไกการแก้ปัญหาโฮสต์ในพื้นที่ซึ่งกำหนดไว้:

#.#.#.#    my-vm

ด้วยเหตุที่มีบางส่วนMySQL 5.2.47บนLinux Mint 14 (Nadia)ซึ่งคล้ายกับกลไกความละเอียดไม่ได้ทำงานUbuntu 12.10 (Quantal)

สารละลาย

เพียงสลับไปใช้ชื่อโดเมนสาธารณะเช่นmy-website.comแก้ปัญหา


@Mat คงที่แล้ว thanj = ks
Édouard Lopez

0

ดูที่นี่สำหรับรายการของทรัพยากรสำหรับการเชื่อมต่อไปยังเป้าหมายต่างๆ (Amazon RDS, Amazon EC2, Windows Azure และอื่น ๆ ): http://forums.mysql.com/read.php?152,252640,252640#msg-252640


0

ฉันมีปัญหาที่คล้ายกันและอาจเป็นไปได้ แต่ตรวจสอบกฎไฟร์วอลล์ของคุณใน AWS ฉันมีชุดช่วง IP เพื่อ จำกัด การเชื่อมต่อจากโลกภายนอก และ IP ที่สำนักงานของฉันเปลี่ยนไปดังนั้นมันจึงอยู่นอกช่วง IP เพื่อนร่วมงานของฉันใน ofice อื่นยังคงสามารถเชื่อมต่อได้ดังนั้นฉันจึงคิดว่าปัญหาเกิดขึ้นบนพีซีของฉัน แต่ปัญหาเกิดจากกฎไฟร์วอลล์ใน AWS หวังว่าจะช่วยให้ใครบางคน :)

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