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 ถ้าใครสนใจลองไปหาอ่านดูละกันครับ

Pidgin ต่อ Google Talk แล้ว Read Error

ปกติถ้าไม่ปรับอะไรเลย หลังจาก add Google Talk เข้าไปใน Pidgin Accounts แล้ว เวลา connect มันจะต่อไปที่ port 5222 ครับ

แต่บางที่มัน block (เช่น MaxNet หรือเน็ตตามบริษัทที่ให้เข้าได้แต่พอร์ท 80, 443) จนทำให้มันขึ้น Read Error

แอบไป netstat ดู Google Talk Client ก็งงว่าทำไมมันต่อผ่านพอร์ท 443 ได้ เลยลองมั่วๆ จนเจอวิธีตั้งให้ Pidgin หลบไปใช้พอร์ท 443 (https) แทน ง่ายจนคาดไม่ถึง โดยเข้าไป Accounts > Modify

  1. Require SSL/TLS เอาออก
  2. Force old (port 5223) SSL ติ๊ก
  3. Allow plaintext auth over unencrypted streams เอาออก
  4. Connect port: 443
  5. Connect server: talk.google.com

Pidgin connect to Google Talk via SSL

พอทำได้แล้วก็ลองไปค้นๆดู ปรากฏมีคนทำได้เต็มไปหมดแล้ว นี่เราล้าหลังชาวบ้านเค้าไปเยอะนี่หว่า

รายชื่อ NTP Server ในไทย

เห็น @icez เล่นอยู่ใน twitter เลยลองไปหาดูบ้าง

อันนี้เป็นรายชื่อจาก th.pool.ntp.org ทั้งหมด

ทำให้รู้ว่าเกษตรมี NTP Server อยู่ใน Pool ของไทยเกินครึ่ง

Name:    ntp.ku.ac.th
Address:  158.108.212.149

Name:    fw.eng.ku.ac.th
Address:  158.108.32.17

Name:    ilm.live.rmutt.ac.th
Address:  203.158.118.3

Name:    time.uni.net.th
Address:  202.28.18.72

Name:    itoml.live.rmutt.ac.th
Address:  203.158.111.32

Address: 158.108.7.157
Address: 158.108.2.100

อันนี้เป็นรายชื่อ Server ที่รู้จัก แต่ไม่ได้อยู่ใน Pool

Name:    delta.cpe.ku.ac.th
Address:  158.108.32.3

Name:   time.navy.mi.th
Address: 118.175.67.83

Name:    clock.nectec.or.th
Address:  202.44.204.114

Name:    time1.nimt.or.th
Address:  203.185.69.60

Name:    time2.nimt.or.th
Address:  203.185.69.59

Name:    time3.nimt.or.th
Address:  203.185.69.56

ป.ล. @icez เตือนมาว่า time3.nimt.or.th เวลามั่วมาก ถ้าคิดจะใช้ลองดูดีๆก่อน

ปรับ Apache ให้ซ่อนรายละเอียด Server

สิ่งที่ผมจะพูดต่อไปนี้อ้างอิงกับ Debian เท่านั้นนะครับ อาจดูเป็นเรื่องง่ายๆ แต่ผมไม่เคยเอะใจสักนิด

ปัญหาก็คือผมต้องการซ่อนรายละเอียดของ Server ที่รันเว็บอยู่ ซึ่งปกติมันจะบอกข้อมูลมาแบบนี้

Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 mod_python/3.3.1 Python/2.5.2 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_wsgi/2.3 Phusion_Passenger/2.0.4 Server at <hidden> Port 80

วิธีซ่อนก็ไม่ยาก แค่ไปแก้สองคำสั่งใน apache2.conf ตามนี้ รายละเอียดพวกนี้ก็จะถูกซ่อนไป

ServerSignature Off
ServerTokens Prod

แต่เมื่อแก้เสร็จแล้ว Apache ก็ยังคายรายละเอียดของ Server ออกมาเยอะเหมือนเดิมอยู่ ซึ่งตามปกติถ้าเราปรับอย่างนั้นแล้ว มันไม่ควรจะคายอะไรออกมาเลย

ก็เลยลองไล่ดูคำสั่งในโฟลเดอร์ config ของ Apache ไปเรื่อยๆ จนเจอว่ามีอีกไฟล์ที่มีสองคำสั่งนั้นเช่นกัน คือ /etc/apache2/conf.d/security เลยตามเข้าไปแก้ในไฟล์นั้น และแล้วมันก็ซ่อนตามที่เราต้องการ

สาเหตุที่ปรับใน /etc/apache2/apache2.conf แล้วไม่ได้ผล นั่นเพราะ 2 คำสั่งข้างบนนั้น มันมาก่อนคำสั่ง

Include /etc/apache2/conf.d/

ซึ่งคำสั่งนี้ทำให้ Apache ดึงทุกไฟล์ในโฟลเดอร์ conf.d เข้ามาประมวลผล เนื่องจาก Apache ใช้หลักการ "มาทีหลังดังกว่า" ก็คือถ้ามีคำสั่งซ้ำกัน มันจะยึดตามอันที่มาหลังสุดเป็นหลัก ด้วยเหตุนี้ มันเลยอ่านคำสั่งในไฟล์ conf.d/security มาทับคำสั่งเดิมใน apache2.conf แทน

บทเรียนวันนี้: คิดจะแก้อะไร ลอง <code>grep -R</code> ดูก่อนทุกครั้ง – -"

ใช้ Gmail อย่างปลอดภัยผ่าน HTTPS

วันนี้เข้าไปดู Gmail Settings เล่นๆ ถึงได้รู้ว่ามี Option ใหม่ออกมา (ที่จริงออกมานานแล้ว พึ่งรู้) นั่นก็คือ Always use https

Always use https จะช่วยบังคับให้ Gmail เข้าผ่าน HTTPS ตลอดเวลา โดยปกติแล้วถ้าเราเข้า Gmail โดยไม่ได้ระบุ HTTPS มันจะเข้าเป็น HTTP ธรรมดา การตั้งค่านี้จะทำให้ Browser ทำการ Redirect ไปยัง HTTP โดยอัตโนมัติ ทำให้เราสามารถใช้งาน Gmail ได้อย่างปลอดภัยโดยไม่ต้องพิมพ์ https:// เอง

Gmail SSL Connection

วิธีเปิดการใช้งาน: เข้า Gmail แล้วกด Settings ตรงด้านบนขวาของจอ เสร็จแล้วเลื่อนลงมาล่างสุดจะเจอการตั้งค่า Browser connection ให้เลือก Always use https (ตามรูป) เสร็จแล้วก็กด Save Changes

Gmail HTTPS Settings

คำเตือน การตั้งค่านี้อาจทำให้ใช้ Gmail จากมือถือไม่ได้

ข้อมูลเพิ่มเติม