ใช้ไฟล์ ~/.ssh/config ให้ SSH เข้าเซิร์ฟเวอร์ได้สะดวกขึ้น
เมื่อดูแลเซิร์ฟเวอร์หลายเครื่อง การพิมพ์ ssh -p 2222 -i ~/.ssh/id_ed25519_web [email protected] ทุกครั้งทั้งเสียเวลาและผิดง่าย ไฟล์ ~/.ssh/config บนเครื่องของคุณ (ฝั่ง Client) ช่วยให้ตั้งชื่อย่อให้แต่ละเซิร์ฟเวอร์ พร้อมเก็บผู้ใช้ พอร์ต และ Key ที่ต้องใช้ จากนั้นพิมพ์เพียง ssh web1 ก็เข้าได้ และชื่อย่อเดียวกันนี้ใช้ได้กับ scp, sftp, rsync และ git ด้วย
ไฟล์นี้เป็นการตั้งค่าของโปรแกรม OpenSSH Client จึงไม่ต้องแก้อะไรบนเซิร์ฟเวอร์ และไม่ต้องใช้สิทธิ์ sudo
สิ่งที่ต้องเตรียม
- เครื่อง Linux, macOS หรือ Windows 10/11 ที่มี OpenSSH Client (ตรวจด้วย
ssh -V) - ข้อมูลการเชื่อมต่อของแต่ละเซิร์ฟเวอร์: IP หรือโดเมน ผู้ใช้ พอร์ต และไฟล์ Private Key ถ้ายังไม่มี Key ดู ตั้งค่า SSH Key และปิดการเข้าสู่ระบบด้วยรหัสผ่านบน Linux
ขั้นตอนที่ 1: สร้างไฟล์และตั้งสิทธิ์
บน Linux และ macOS
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/config
chmod 600 ~/.ssh/config
บน Windows ไฟล์อยู่ที่ C:\Users\ชื่อผู้ใช้\.ssh\config (ไม่มีนามสกุล) สร้างได้ด้วย PowerShell
New-Item -ItemType Directory -Force $HOME\.ssh
notepad $HOME\.ssh\config
ถ้า Notepad บันทึกเป็น config.txt ให้เปลี่ยนชื่อเอานามสกุลออก บน Linux และ macOS สิทธิ์ของไฟล์สำคัญ ถ้าผู้ใช้อื่นเขียนไฟล์ได้ SSH จะปฏิเสธด้วยข้อความ Bad owner or permissions
ขั้นตอนที่ 2: เพิ่มเซิร์ฟเวอร์เครื่องแรก
Host web1
HostName 203.0.113.10
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519_web
IdentitiesOnly yes
| คำสั่ง | ความหมาย |
|---|---|
Host | ชื่อย่อที่คุณจะพิมพ์ ตั้งได้ตามใจ ไม่ต้องตรงกับชื่อเครื่องจริง |
HostName | IP หรือโดเมนจริงของเซิร์ฟเวอร์ |
User | ผู้ใช้ที่ใช้ Login |
Port | พอร์ต SSH |
IdentityFile | ไฟล์ Private Key ที่จะใช้ |
IdentitiesOnly yes | ใช้เฉพาะ Key ที่ระบุ ไม่ลองทุก Key ใน ssh-agent ป้องกัน Error Too many authentication failures |
บันทึกไฟล์แล้วทดสอบ
ssh web1
ควรเข้าเซิร์ฟเวอร์ได้ทันทีเหมือนพิมพ์คำสั่งเต็ม การเยื้องบรรทัดไม่มีผลต่อการทำงาน แต่ช่วยให้อ่านง่ายว่าค่าใดเป็นของ Host ไหน
ขั้นตอนที่ 3: เพิ่มหลายเครื่องและค่ากลาง
ตัวอย่างไฟล์ที่ใช้งานจริงกับ 3 เครื่อง พร้อมค่ากลางสำหรับทุกเครื่อง
Host web1
HostName 203.0.113.10
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519_web
Host web2
HostName 203.0.113.11
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519_web
Host db1
HostName 10.0.0.5
User admin
ProxyJump web1
Host *
IdentitiesOnly yes
ServerAliveInterval 60
ServerAliveCountMax 3
AddKeysToAgent yes
หลักสำคัญที่ต้องรู้คือ SSH อ่านไฟล์จากบนลงล่าง และใช้ค่าแรกที่พบสำหรับแต่ละคำสั่ง ค่าที่ตั้งภายหลังจะไม่ทับค่าก่อนหน้า ดังนั้นให้วางบล็อกเฉพาะเครื่องไว้ด้านบน และวาง Host * ซึ่งเป็นค่ากลางไว้ท้ายสุดเสมอ ถ้าวาง Host * ไว้บนสุด ค่าในนั้นจะชนะค่าของทุกเครื่อง
Host รับได้หลายชื่อและรับ Wildcard เช่น Host web1 web2 หรือ Host *.example.com ใช้รวมค่าที่เหมือนกันได้
ขั้นตอนที่ 4: กัน SSH หลุดเมื่อไม่ได้ใช้งาน
Firewall หรือ Router ระหว่างทางมักตัดการเชื่อมต่อที่เงียบนานเกินไป ค่า ServerAliveInterval 60 ให้ Client ส่งสัญญาณเล็ก ๆ ไปทุก 60 วินาที และ ServerAliveCountMax 3 ให้ตัดการเชื่อมต่อเองถ้าไม่ได้รับคำตอบ 3 ครั้งติดกัน แทนที่จะค้างนิ่ง วิธีนี้ช่วยได้กับการหลุดจากการไม่ใช้งาน แต่ไม่ช่วยเมื่ออินเทอร์เน็ตขาดจริง ถ้ากำลังรันงานยาว ให้ใช้ tmux ร่วมด้วย
ขั้นตอนที่ 5: เข้าเครื่องหลัง Jump Host ด้วย ProxyJump
ในตัวอย่างข้างต้น db1 มีเฉพาะ IP ภายใน 10.0.0.5 ที่เข้าจากอินเทอร์เน็ตไม่ได้ ProxyJump web1 ทำให้ SSH เชื่อมต่อผ่าน web1 ก่อนแล้วต่อไปยัง db1 โดยอัตโนมัติ การยืนยันตัวตนกับ db1 ยังทำจากเครื่องของคุณ Private Key จึงไม่ต้องไปวางไว้บน web1
ssh db1
ขั้นตอนที่ 6: ทำ Port Forward สำหรับฐานข้อมูล
ถ้าต้องการเปิดโปรแกรมจัดการฐานข้อมูลบนเครื่องของคุณ เชื่อมต่อ MySQL บนเซิร์ฟเวอร์โดยไม่เปิดพอร์ต 3306 ออกอินเทอร์เน็ต ให้เพิ่มบล็อกนี้
Host web1-db
HostName 203.0.113.10
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519_web
LocalForward 13306 127.0.0.1:3306
รัน ssh -N web1-db แล้วเปิดโปรแกรมให้เชื่อมต่อที่ 127.0.0.1 พอร์ต 13306 รายละเอียดการตั้งค่าในโปรแกรมอยู่ใน เชื่อมต่อฐานข้อมูลบนเซิร์ฟเวอร์ผ่าน SSH Tunnel ด้วย DBeaver
ขั้นตอนที่ 7: ใช้ชื่อย่อกับเครื่องมืออื่น
scp backup.sql web1:/home/deploy/
sftp web1
rsync -avz ./site/ web1:/var/www/example.com/
git clone web1:/home/deploy/repos/site.git
ทุกคำสั่งใช้ผู้ใช้ พอร์ต และ Key จากไฟล์ config โดยอัตโนมัติ ไม่ต้องใส่ -P หรือ -i อีก ดูการใช้ scp และ sftp เพิ่มเติมใน โอนไฟล์ระหว่างเครื่องด้วย scp และ sftp
ขั้นตอนที่ 8: แยกไฟล์ด้วย Include เมื่อมีเครื่องจำนวนมาก
ถ้าดูแลหลายโปรเจกต์ แยกไฟล์ตามลูกค้าหรือโปรเจกต์ได้ โดยใส่บรรทัดนี้ไว้บนสุดของ ~/.ssh/config (ต้องอยู่ก่อนบล็อก Host ใด ๆ)
Include ~/.ssh/config.d/*
จากนั้นสร้างไฟล์แยก เช่น ~/.ssh/config.d/project-a ที่มีบล็อก Host ตามรูปแบบเดิม
ตรวจสอบผลลัพธ์
ดูค่าที่ SSH จะใช้จริงกับชื่อย่อหนึ่งตัว โดยไม่ต้องเชื่อมต่อ
ssh -G web1 | grep -E '^(hostname|user|port|identityfile) '
ผลที่คาดหวังคือ hostname 203.0.113.10, user deploy, port 2222 และ Path ของ Key ที่ตั้งไว้ ถ้าค่าไม่ตรง แปลว่ามีบล็อกอื่นที่ตรงกับชื่อนี้ก่อน ให้ดูลำดับในไฟล์ และทดสอบการเชื่อมต่อจริงพร้อมรายละเอียดด้วย ssh -v web1
ปัญหาที่พบบ่อย
Bad owner or permissions on ~/.ssh/config
ไฟล์เขียนได้โดยผู้ใช้อื่น ให้รัน chmod 600 ~/.ssh/config และตรวจว่าเจ้าของไฟล์คือผู้ใช้ของคุณ บน Windows ให้ตรวจว่าไฟล์อยู่ในโฟลเดอร์โปรไฟล์ของคุณเองและไม่ได้แชร์สิทธิ์ให้ผู้ใช้อื่น
Too many authentication failures
ssh-agent มี Key หลายตัว และ SSH ลองทีละตัวจนเซิร์ฟเวอร์ตัดการเชื่อมต่อ ให้ใส่ IdentitiesOnly yes พร้อม IdentityFile ที่ถูกต้อง ถ้าเซิร์ฟเวอร์ติดตั้ง Fail2ban การล้มเหลวซ้ำอาจทำให้ IP ถูกแบนชั่วคราว ดู ป้องกันการเดารหัสผ่าน SSH ด้วย Fail2ban
ค่าที่ตั้งไว้ไม่มีผล
มักเกิดจากวาง Host * ไว้ด้านบน หรือพิมพ์ชื่อคำสั่งผิด (เช่น Hostname ถูก แต่ Host Name ผิด) ใช้ ssh -G ชื่อย่อ ตรวจค่าที่ได้จริง
ควรเก็บรหัสผ่านไว้ในไฟล์ config ได้หรือไม่
ไม่ได้ และไม่ควร OpenSSH ไม่มีคำสั่งสำหรับเก็บรหัสผ่าน ให้ใช้ SSH Key ที่มี Passphrase และให้ ssh-agent จำ Passphrase ไว้ระหว่างใช้งานด้วย AddKeysToAgent yes
หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อเซิร์ฟเวอร์ ระบบปฏิบัติการ คำสั่งที่ใช้ และข้อความ Error ที่พบ เพื่อให้ตรวจสอบได้รวดเร็วขึ้น
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


