Score:0

ฉันต้องทำอย่างไรเพื่ออนุญาตการเข้าถึงระยะไกลไปยัง MySQL บนเซิร์ฟเวอร์ Unbuntu 20.04

ธง es

ฉันมีสคริปต์ Python เล็กน้อยเพื่อรวบรวมการบ้านของนักเรียนและคะแนนงานของชั้นเรียนออนไลน์จากตาราง allstudentsAnswers20BE

ใช้งานได้ดีกับหน้าเว็บโฮสติ้งที่ใช้ร่วมกันแบบเก่าของฉัน

บนเซิร์ฟเวอร์คลาวด์ Ubuntu 20.04 ใหม่ ฉันได้รับการปฏิเสธการเชื่อมต่อ ฉันไม่มีประสบการณ์ในการใช้งานเซิร์ฟเวอร์คลาวด์

ฉันอนุญาตพอร์ต 33060 และ 3306 ใน UFW

ip ของฉันอยู่ที่บ้านไม่ได้รับการแก้ไข

เมื่อฉันเรียกใช้สคริปต์ Python ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามเชื่อมต่อกับเซิร์ฟเวอร์คลาวด์

pymysql.err.OperationalError: (1130, "183.206.16.30' ไม่ได้รับอนุญาต เชื่อมต่อกับเซิร์ฟเวอร์ MySQL นี้")

netstat แจ้งว่า mysqld กำลังฟัง 33060 และ 3306 ดังนั้นฉันจึงอนุญาตทั้งสองอย่างในไฟร์วอลล์ ufw

การเชื่อมต่อกับเซิร์ฟเวอร์คลาวด์ผ่าน ssh ฉันวิ่ง:

sudo นาโน /etc/mysql/mysql.conf.d/mysqld.cnf

ฉันเปลี่ยนที่อยู่การผูกบรรทัดเป็น 0.0.0.0 (ฉันลองด้วย *)

ฉันรีสตาร์ท mysql: sudo systemctl รีสตาร์ท mysql

ต้องมีอย่างอื่นที่ต้องตั้งค่าฝั่งเซิร์ฟเวอร์

คำแนะนำใด ๆ ที่อาจเป็นไปได้ฉันต้องการสิ่งนี้เพื่อทำงาน

ฉันได้รับข้อมูลนี้ด้วย (สมมติว่า cloud ip ของฉันคือ 123.456.789.123):

pedro@ebs-105422:~$ nc -v -w 2 123.456.789.123 3306
การเชื่อมต่อกับพอร์ต 123.456.789.123 3306 [tcp/mysql] สำเร็จ! pedro@ebs-105422:~$

นี่หมายความว่า mysqld กำลังฟัง 3530 หรือไม่ หรือว่าเป็น PID ของ mysqld??

pedro@ebs-105422:~$ sudo netstat -tap | grep mysql tcp 0 0 0.0.0.0:mysql 0.0.0.0:* ฟัง 3530/mysqld
tcp6 0 0 [::]:33060 [::]:* ฟัง 3530/mysqld
pedro@ebs-105422:~$

ด้านล่างมาจาก mysql บนเซิร์ฟเวอร์ ยืนยันพอร์ต 3306

mysql> แสดงตัวแปรโดยที่ตัวแปรชื่อใน ('ชื่อโฮสต์','พอร์ต');
+---------------+------------+
| ชื่อตัวแปร | ค่า |
+---------------+------------+
| ชื่อโฮสต์ | ebs-105422 |
| พอร์ต | 3306 | +------------+------------+
2 แถวในชุด (0.01 วินาที)

มายเอสคิวแอล>

in flag
ผู้ใช้รายใดที่คุณใช้เพื่อเชื่อมต่อกับฐานข้อมูล คุณได้ยืนยันว่าชื่อผู้ใช้สามารถเข้าถึงได้จากภายนอกหรือไม่?
Pedroski avatar
es flag
ฉันจะยืนยันได้อย่างไร ทั้งหมดที่ฉันรู้คือการใช้ pymsql เพื่อเชื่อมต่อกับเว็บโฮสติ้งที่ใช้ร่วมกันของฉันทำงานได้ดี แต่บนเซิร์ฟเวอร์คลาวด์ ฉันไม่สามารถเชื่อมต่อได้ ไม่ว่าจะพยายามอย่างไร ฉันตั้งค่า UFW ให้อนุญาต 3306 และ 33060 ฉันคิดว่าจะทำได้ แต่อนิจจา ไม่มีความสุข
Pedroski avatar
es flag
การใช้เคล็ดลับ ssh tunneling ฉันสามารถเปิด phpMyAdmin บนเซิร์ฟเวอร์คลาวด์ เข้าสู่ระบบด้วยข้อมูลประจำตัวของฉัน และจัดการตาราง แต่สิ่งที่ฉันต้องการคือการคว้าข้อมูลในแต่ละสัปดาห์ เมื่อรวมกับ openpyxl ฉันมีผลลัพธ์ทั้งหมดสำหรับนักเรียนทุกคนที่เขียนลงใน Excel ในเวลาประมาณ 2 วินาที!
in flag
การใช้อุโมงค์ SSH คุณกำลังเชื่อมต่อกับบัญชีผู้ใช้ภายในเครื่อง บางอย่างเช่น `'pedroski'@'localhost'` สำหรับ MySQL การเชื่อมต่อภายนอกจะทำให้คุณต้องสร้างบัญชีเช่น `'pedroski'@'%'` แม้ว่าจะไม่ทราบเพิ่มเติมเกี่ยวกับการตั้งค่าสิ่งต่าง ๆ นี่เป็นเพียงการคาดเดา
Score:0
ธง es

ฉันคิดออกแล้ว คำตอบนี้เป็นเพียงเพื่อช่วยทุกคนที่อาจมีปัญหาเดียวกัน วิธีนี้อาจไม่ปลอดภัยนัก เมื่อเปิด 3306 แต่ a) ฉันมีเพียงการบ้าน b) คุณยังต้องการชื่อผู้ใช้และรหัสผ่าน

เมื่อคุณสร้างผู้ใช้บน mysql จะมีลักษณะดังนี้ เมื่อคุณสร้างผ่าน ssh บนเซิร์ฟเวอร์:

สร้างผู้ใช้ 'peter'@'localhost' ระบุโดย 'รหัสผ่าน';
ให้สิทธิ์ทั้งหมดใน some_db.* ถึง 'peter'@'localhost';

หากคุณต้องการเข้าถึงระยะไกล คุณต้องเปลี่ยนข้อมูลผู้ใช้ (หรือสร้างผู้ใช้ใหม่):

เปลี่ยนชื่อผู้ใช้ 'peter'@'localhost' เป็น 'peter'@'%';
ให้สิทธิ์ทั้งหมดใน Somedb.* เป็น 'peter'@'%';

% ในที่นี้หมายถึง ip ใดๆ

จากนั้นยังผ่าน ssh บนเซิร์ฟเวอร์:

sudo นาโน /etc/mysql/mysql.conf.d/mysqld.cnf

ค้นหาบรรทัดที่มี

ที่อยู่ผูก = 127.0.0.1

เปลี่ยนสิ่งนี้เป็น

ที่อยู่ผูก = 0.0.0.0

ctrl X เพื่อออกจากนาโน nano ถามว่าคุณต้องการบันทึกหรือไม่ กด y จากนั้น Enter เพื่อบันทึกในตำแหน่งเดียวกับที่คุณเปิด /etc/mysql/mysql.conf.d/mysqld.cnf

จากนั้น (บนเซิร์ฟเวอร์):

sudo systemctl รีสตาร์ท mysql

หลังจากนั้น Python ของฉันก็ทำงานได้ดีจาก Idle shell:

def mysqlRemoteAttn ​​(คลาส): 
    # เพื่อเชื่อมต่อฐานข้อมูล MySQL ระยะไกล 
    conn = pymysql.connect( 
        โฮสต์='123.456.789.123',
        พอร์ต = 3306,
        ผู้ใช้ = 'ชื่อผู้ใช้ของฉัน',  
        รหัสผ่าน = 'รหัสผ่านของฉัน', 
        db='allstudentsdb', 
        ) 
      
    เคอร์ = conn.cursor()

    sql = f"เลือกนักเรียน, attn_this_week จากนักเรียนทั้งหมด{clas}"
    cur.execute(sql)
    เอาต์พุต = cur.fetchall()           
            
    #เพื่อปิดการเชื่อมต่อ 
    conn.close()
    ส่งคืนเอาต์พุต

# รับการเข้าร่วมจากหน้าเว็บ MySQL
ผลลัพธ์ = mysqlRemoteAttn ​​(คลาส)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา