SSH (Secure Shell) คืออะไร?

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


SSH คืออะไร

SSH (Secure Shell) คือโปรโตคอลเครือข่ายที่ช่วยให้ผู้ใช้สามารถเชื่อมต่อและควบคุมอุปกรณ์ปลายทางจากระยะไกลผ่านการเข้ารหัสข้อมูลทั้งหมด โดยเฉพาะบนระบบปฏิบัติการแบบ Unix/Linux

จุดเด่นของ SSH:

  • ปลอดภัยกว่าการเชื่อมต่อแบบ Telnet หรือ FTP
  • รองรับการรับส่งข้อมูลแบบเข้ารหัส
  • สามารถทำการยืนยันตัวตนผ่านรหัสผ่านหรือ SSH Key

การทำงานของ SSH

SSH ทำงานผ่านการเข้ารหัสแบบ Public Key Cryptography โดยมีหลักการพื้นฐานดังนี้:

  • ใช้คู่คีย์ (Public Key และ Private Key) ในการเข้ารหัสและถอดรหัสข้อมูล
  • ใช้พอร์ตมาตรฐานคือ Port 22
  • มีการตรวจสอบตัวตนผู้ใช้ก่อนเข้าใช้งาน

ประโยชน์ของการใช้ SSH

  • ความปลอดภัยสูง: ข้อมูลที่รับส่งจะถูกเข้ารหัส
  • ใช้งานจากระยะไกลได้ทุกที่
  • สามารถโอนย้ายไฟล์ผ่าน SCP/SFTP ได้อย่างปลอดภัย
  • รองรับการใช้งาน Tunnel เพื่อป้องกันการดักฟัง

การติดตั้ง SSH

บน Linux (Debian/Ubuntu)

  1. ติดตั้ง OpenSSH Server:
    • root@vm01:~# sudo apt update
    • root@vm01:~# sudo apt install openssh-server
  2. ตรวจสอบสถานะของ SSH Service:
    • root@vm01:~# sudo systemctl status ssh
  3. ให้ SSH ทำงานอัตโนมัติเมื่อเปิดเครื่อง:
    • root@vm01:~# sudo systemctl enable ssh
  4. เริ่มต้นใช้งาน SSH ทันที:
    • root@vm01:~# sudo systemctl start ssh

บางระบบอาจใช้ชื่อ sshd แทน ssh (โดยเฉพาะบน CentOS หรือ RHEL)

บน Windows 10/11

  1. ไปที่ Settings → Apps → Optional Features → เพิ่มฟีเจอร์ “OpenSSH Client” และ “OpenSSH Server” (หากยังไม่มี)
  2. หรือใช้ PowerShell: Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
  3. เชื่อมต่อไปยัง Server ด้วย PowerShell หรือ Windows Terminal: ssh user@hostname

บน macOS

  1. เปิดใช้งาน Remote Login:
    • ไปที่ System Preferences → Sharing → ติ๊ก “Remote Login”
  2. macOS มี SSH Client ติดตั้งมาแล้ว สามารถใช้ Terminal ได้ทันที: ssh user@hostname

การใช้งานคำสั่ง SSH พื้นฐาน

SSH ใช้เพื่อเข้าสู่ระบบหรือสั่งการจากระยะไกลผ่านเครือข่าย

ตัวอย่างคำสั่ง:

  • เชื่อมต่อไปยัง Server: ssh user@hostname
  • กำหนดพอร์ตเอง (เช่น Port 2222 แทน 22): ssh -p 2222 user@hostname
  • ใช้ Private Key (.pem หรือ .rsa) ในการเข้าสู่ระบบ: ssh -i ~/.ssh/mykey.pem user@hostname
  • ตั้งชื่อเครื่อง (Alias) ไว้ใน ~/.ssh/config ก็ได้: Host myserver HostName example.com User myuser Port 2222 IdentityFile ~/.ssh/mykey.pem

จากนั้นใช้คำสั่ง ssh myserver ได้เลย


การใช้งาน SSH Key

การใช้ SSH Key แทนรหัสผ่านช่วยเพิ่มความปลอดภัย

สร้าง SSH Key:

ssh-keygen -t rsa -b 4096
  • ค่าเริ่มต้นจะเก็บไว้ที่ ~/.ssh/id_rsa (private) และ ~/.ssh/id_rsa.pub (public)

คัดลอก Public Key ไปยัง Server:

ssh-copy-id user@hostname

หรือทำด้วยตนเอง:

  1. เปิดไฟล์ ~/.ssh/id_rsa.pub
  2. คัดลอกเนื้อหาทั้งหมดไปวางใน Server ที่ ~/.ssh/authorized_keys

อย่าลืมให้สิทธิ์ที่เหมาะสมแก่ไฟล์:

chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

SSH Agent และ Agent Forwarding

SSH Agent ช่วยจัดการ Private Key โดยไม่ต้องใส่รหัสทุกครั้ง

เริ่ม SSH Agent:

eval "$(ssh-agent -s)"

เพิ่ม Key เข้า Agent:

ssh-add ~/.ssh/id_rsa

Forward Agent (ใช้ key เดียวกันเมื่อ SSH ต่อเนื่องหลายเครื่อง):

เพิ่มใน ~/.ssh/config:

Host *
  ForwardAgent yes

เหมาะสำหรับการทำงานผ่านหลาย Server โดยไม่ต้องใส่ Key ซ้ำ


SCP และ SFTP

ใช้ SSH ในการโอนย้ายไฟล์

SCP (Secure Copy):

  • ส่งไฟล์จากเครื่องเราไป Server: scp file.txt user@host:/path/
  • ดาวน์โหลดไฟล์จาก Server: scp user@host:/path/file.txt .
  • ส่งโฟลเดอร์ทั้งหมด: scp -r myfolder user@host:/destination/

SFTP (SSH File Transfer Protocol):

  • เริ่มใช้งาน: sftp user@hostname
  • คำสั่งภายใน SFTP:
    • ls แสดงไฟล์
    • get filename ดาวน์โหลดไฟล์
    • put filename อัปโหลดไฟล์
    • cd ย้ายไดเรกทอรี

SSH Tunnel

SSH Tunnel ช่วยให้เราส่งข้อมูลผ่าน SSH อย่างปลอดภัย โดยเฉพาะเมื่อเข้าถึงระบบภายใน

Local Port Forwarding

เช่น ต้องการเข้าถึง MySQL ที่ Server ผ่านพอร์ต 3306:

ssh -L 3306:localhost:3306 user@host
  • ตอนนี้เราสามารถเชื่อมต่อ localhost:3306 บนเครื่องเรา เหมือนอยู่ที่ Server

Remote Port Forwarding

หากต้องการเปิดพอร์ตของเครื่องเราให้คนใน Server เข้าถึง:

ssh -R 8080:localhost:80 user@host

Dynamic Port Forwarding (SOCKS Proxy)

เหมาะสำหรับใช้ Proxy เว็บผ่าน SSH:

ssh -D 1080 user@host

จากนั้นตั้งค่า browser หรือโปรแกรมอื่นให้ใช้ SOCKS proxy ที่ localhost:1080


การตั้งค่าเพื่อความปลอดภัย

  • ปิดการเข้าสู่ระบบแบบ root
  • ปิดการเข้าสู่ระบบด้วยรหัสผ่าน
  • เปิดใช้งาน Fail2Ban
  • ใช้ Firewall จำกัด IP

การจัดการผู้ใช้งาน

  • เพิ่มผู้ใช้งานใหม่:
sudo adduser newuser
  • สร้างโฟลเดอร์ .ssh และไฟล์ authorized_keys

ปัญหาที่พบบ่อย

  • Connection refused: SSH Server อาจไม่ได้ทำงานหรือ firewall บล็อก
  • Permission denied: Key ไม่ถูกต้อง หรือไม่ได้รับอนุญาต
  • Timeout: เชื่อมต่อไม่สำเร็จเพราะ latency หรือ firewall

สรุป

SSH เป็นเครื่องมือพื้นฐานที่จำเป็นสำหรับการจัดการระบบจากระยะไกล โดยเฉพาะในยุค Cloud และ DevOps ผู้ที่เรียนรู้และเข้าใจ SSH จะสามารถทำงานด้านระบบและความปลอดภัยได้อย่างมีประสิทธิภาพและปลอดภัยมากยิ่งขึ้น