วันอังคารที่ 25 กันยายน พ.ศ. 2555

~/.ssh/config

เทคนิคการใช้ไฟล์ config ของ ssh ซึ่งเป็นไฟล์ค่าปรับแต่งสำหรับ ssh client บน Linux ซึ่งปกติเราจะระบุค่าต่างๆ ด้วย option ท้ายคำสั่ง ซึ่งบางครั้ง โฮสต์ปลายทางคนละโฮสต์ก็ต้องใช้ option ต่างกัน โดยเฉพาะ port ซึ่งมีหลายๆ โฮสต์ที่อาจจะเปลี่ยนหมายเลข port เป็นตัวอื่น ไม่ใช่ 22

ให้สร้างไฟล์ ~/.ssh/config ขึ้นมา (ปกติไม่มีไฟล์นี้อยู่)

ใส่เนื้อหา
Host *
Protocol 2
ServerAliveInterval 300
ServerAliveCountMax 100

เป็นการตั้งค่าแบบทั่วไป คือเวลาติดต่อกับทุก host ให้ใช้ protocol version 2 เท่านั้น และกำหนดให้ส่งแพกเกจเพื่อกระตุ้นให้มีการเชื่อมต่อทุก 5 นาที (300 วินาที) และส่งเป็นจำนวนสูงสุด 100 ครั้ง แสดงว่า ssh ที่เชื่อมจะไม่หลุดเป็นเวลา 500 นาที (8 ชั่วโมง 20 นาที) ถ้าไม่ตั้งแบบนี้บ่อยครั้ง ssh จะหลุดเร็วเกินไป

Host terminus
HostName terminus.abcdef.com
Port 18222
User ubuntu

แบบนี้เป็นการตั้งค่าเฉพาะ host โดยจะกำหนดชื่อ host สำหรับใช้อ้างอิง เช่น terminus, แล้วระบุที่อยู่แบบเต็ม เช่น terminus.abcdef.com, กำหนด port เชื่อมต่อปลายทางเป็น 18222 ปกติคือ 22 ซึ่งไม่ระบุก็ได้เพราะเป็นค่าปริยาย แต่บางเซิร์ฟเวอร์อาจจะเลี่ยงมาใช้พอร์ตอื่นเพื่อลดการโจมตีแบบ portscan แล้ว attack ที่พอร์ต ssh, ระบุชื่อ user เป็น ubuntu ถ้าไม่ระบุมันจะใช้ชื่อ user เราที่เครื่อง local เอง หรือระบุที่ command line

ถ้ามีโฮสต์อื่นก็เพิ่มเข้าไปทำนองเดียวกัน

การตั้งค่าอื่นๆ มีอีกมาก ดูได้จากคำสั่ง
$ man ssh_config

ถ้าเป็นเครื่องที่ใช้ร่วมกันหลายๆ คนหรือมีบริการอื่นรันอยู่เพื่อให้บริการบุคคลภายนอกด้วย หรือไม่แน่ใจ ควรเปลี่ยนสิทธิของไฟล์นี้ให้อ่านเขียนได้เฉพาะ user เราเองเท่านั้น โดยสั่ง
$ chmod go-rw ~/.ssh/config
$ ls -l ~/.ssh/config
-rw------- 1 kamthorn kamthorn 381 Aug 15 12:31 /home/kamthorn/.ssh/config


การใช้งาน
เดิมเราต้องสั่งด้วย
$ ssh -p 18222 ubuntu@terminus.abcdef.com

พอเราตั้ง config ไว้แล้วก็แค่
$ ssh terminus

เวลาจะ scp หรือ rsync ผ่าน ssh ก็จะง่ายขึ้น ไม่ต้องระบุพอร์ตอีกต่อไป