SSH Public Key Authen พอกันทีกับการพิมพ์รหัสเข้า SSH

ใครสงสัยว่ามันคืออะไร ลองไปอ่านที่นี่ดูนะครับ ถ้าให้เล่าแบบย่อๆก็เป็นการทำให้เรา ssh เข้าไปได้โดยไม่ต้องใส่รหัส จริงๆมันมีเรื่องความปลอดภัยด้วย ตามไปอ่านดูในลิ้งค์ที่ให้ไว้ละกัน มาพูดถึงวิธีสร้างคีย์แล้วเอาไปใส่ server กันดีกว่า

เอาบน Windows ก่อนนะครับ บน Linux ทำง่าย เดี๋ยวค่อยว่ากัน

เริ่มจาก ลง PuTTYgen ถ้าติดตั้ง PuTTY ไว้แล้วก็เรียกได้จาก Start > All Programs > PuTTY > PuTTYgen จะเห็นหน้าตาแบบนี้

PuTTYgen

ไม่ต้องคิดมาก กระแทกปุ่ม Generate ทันที แล้วเอาเมาส์วนๆในหน้าต่างสักพัก มันจะ random key มาให้ ใส่ comment ตามใจชอบแล้วกด Save private key ซะ อย่าลืมก้อปจดตัวอักษรยึกยือๆในช่อง Public key for pasting… ไว้ด้วยนะครับ

PuTTYgen Finished

เปิดโปรแกรม PuTTY ไปที่ Connection > Data ใส่ Auto-login username เป็น username ที่เราจะใช้เข้า

Auto-login username

ไปที่ Connection > SSH > Auth แล้วเลือก Private key ที่เราเซฟไว้เมื่อกี้

Private key file

กลับไปหน้าแรก กรอก IP/Port สำหรับต่อให้เรียบร้อย เสร็จแล้วตั้งชื่อที่เราอยากตั้งในช่อง Saved Sessions แล้วกด Save

Connection

กด Open ก็จะเป็นการเข้า SSH ตามปกติ ตอนนี้ยังต้องใส่รหัสอยู่นะ

Logging in

เสร็จแล้วสร้างโฟลเดอร์ .ssh (mkdir .ssh) แล้วเข้าไปสร้าง(หรือแก้)ไฟล์ .ssh/authorized_keys เสร็จแล้วเอา Public key for pasting … ที่ก้อปไว้ตอนแรกมาแปะลงไป บางทีอาจมีไฟล์นี้อยู่แล้วก็ช่างมัน ใส่ไปในบรรทัดต่อไปเลย

ออกมาแล้วลองเปิด PuTTY แล้วดับเบิลคลิกไอ้อันที่เราเซฟไว้เมื่อกี้ มันจะไม่ถามรหัสเราอีกแล้ว สังเกตจากบรรทัดที่ 2 จะมีบอกว่ากำลังใช้ Public key authen อยู่

Logged in!

ถ้าอยากให้ปลอดภัยกว่านี้หน่อย ก็ใช้ PuTTYgen ตั้งรหัส Private key ของเราซะ เวลา Login มันก็จะถามรหัสของ Key เวลาเปลี่ยนรหัสก็เปลี่ยนแค่ที่ Key ไม่ต้องมานั่งเปลี่ยน server ทุกเครื่อง

สำหรับวิธีบน Linux อันนี้ง่าย อธิบายได้ด้วยรูปเดียว

เคสนี้เราต้องการต่อจากเครื่อง Enceladus ไปยังเครื่อง Opteron (158.108.34.34) ลองดูรูปแล้วอ่านตามนะครับ

SSH Public Key for Linux

เริ่มจากเครื่องเรา สั่ง ssh-keygen กด enter รัวๆ แล้วสั่ง ssh-copy-id username@destination username กับ destination แก้ให้ถูกต้องด้วย มันจะถามรหัสทีนึง แค่นี้ก็เรียบร้อย

เสร็จแล้วลองทดสอบด้วยการต่อไปที่เครื่องนั้น มันก็จะไม่ถามรหัสเราอีกแล้ว

ป.ล. จริงๆมีอีกทางคือใช้ Pageant ที่อยู่ในชุดของ PuTTY  ถ้าบน Linux ก็ใช้ ssh-agent ถ้าใครสนใจลองไปหาอ่านดูละกันครับ

E-Book สอน CentOS Server (ภาษาไทย)

เป็นของพี่โสธรทำไว้ครับ แจกให้ดาวน์โหลดกันได้ฟรีๆ ผมอ่านแล้วเยี่ยมมากเลยครับ

คนที่สนใจสาย Server แนะนำว่าควรอ่านอย่างยิ่ง สาย Debian ก็อ่านได้ครับ มีหลายๆอย่างคล้ายกันอยู่

ไปโหลดกันได้ที่ http://linux.sothorn.org/node/558

pv: แอบดูสถานะข้อมูลที่ผ่าน pipe

สมมุติว่าจะ backup sql

mysqldump -u root -p --all-databases | bzip2 > backup.sql.bz2

ถ้า database ใหญ่ๆ มันจะรันนานมาก โดยไม่มีอะไรบอกเลยว่ามันยังทำงานอยู่

ถ้าอยากรู้ล่ะ? pipeview ช่วยได้

aptitude install pv

แทรก pv เข้าไปตรงกลาง

mysqldump -u root -p --all-databases | pv | bzip2 > backup.sql.bz2

จะมีสถานะบอกว่ามีอะไรวิ่งผ่าน pipe บ้าง

38MB 0:00:27 [1.02MB/s] [           < =>            ]

Linux – ลบไฟล์เล็กๆจำนวนมหาศาล

เรื่องมันมีอยู่ว่า Hosting ที่ดูแลอยู่โดน spam mail มหาศาลเข้าไป โฟลเดอร์ spool เลยเต็มไปด้วยเมล์ นับๆแล้วรวมกันได้ 530,367 ฉบับ แปลว่ามีไฟล์อยู่ 530,367 ไฟล์ แต่ละไฟล์ขนาดไม่เกิน 1 KB

ทีนี้ปัญหามันเกิดเมื่อต้องการลบโฟลเดอร์นี้ทิ้ง ทีนี้ partition แบบ ext3 มันจัดการไฟล์แบบนี้ได้ห่วยแตกมากๆ ลองลบด้วยหลายๆวิธีก็ไม่สำเร็จ

  • rm -rf dirname # ลองรันทิ้งไว้ชั่วโมงนึง (ไปกินข้าวมา) กลับมาเช็คจำนวนไฟล์ยังเท่าเดิมเป้ะ
  • find dirname -delete # ลองรันทิ้งไว้ 5 นาที ผลคือจำนวนไฟล์เท่าเดิมเช่นเคย

นั่งงมๆอยู่นาน เลยลองถามไปใน twitter ได้ @sourcode มาร่วมปวดหัวด้วยกัน จนสุดท้ายลองเล่นกับ shell script แทน ได้ผลแฮะ

# ls -1 dirname > list
# for i in `cat list`; do rm -f dirname/$i; done

ขอบคุณ bash อีกครั้ง อันที่จริงยังลบไม่เสร็จนะครับ ตอนนี้รันมา 15 นาที ไฟล์หายไป 100,000 กว่าๆแล้ว เหลืออีก 400,000 กว่าไฟล์เอง

ป.ล. @manatsawin ได้ส่งโค้ด python มาให้ลองเหมือนกัน พอดีผมลอง shell script อันบนแล้วสำเร็จซะก่อนเลยไม่ได้ลอง ยังไงก็ขอบคุณเช่นกันครับ

import glob,os; for i in glob.glob("*"): os.remove(i)

ดูแล้วสั้นกว่า bash เยอะเลย