สืบเนื่องจากบทความเรื่อง shell robot ภาคที่ 1 ตาม link นี้ http://www.ubuntuclub.com/node/169 ของน้อง nat3
อืม..... ^_^ แอบนึกในใจ "ชอบชะมัดยาดเลยแฮะโปรแกรมอาร๊ายโคตรเทพ(เทพเหมือนทีมแมนยู :p)" และประกอบกับช่วงนี้
โดนมอบหมายงานอะไรทำนองนี้มาจากท่านหัวหน้าก็เลยตัดสินใจสละเวลาจากการเล่น winning วันละนิดละหน่อยศึกษาเรื่องนี้
จนเริ่มที่จะมีความรู้ขึ้นมาสักหน่อยล่ะ ก็เลยเอาประสบการณ์การลองผิดลองถูกกับโปรแกรมเทพๆมาเล่าสู่กันฟัง
step1: ก่อนอื่นครับก่อนออกรบต้องมีอาวุธก่อน
$sudo aptitude install expect
หลังจากอาวุธพร้อมทีนี้ก็พร้อมโจมตีครับ โจทย์มีอยู่ว่าเราต้องทำการสร้าง script สำหรับ scp ไฟล์ไปยัง server แบบอัตโนมัติได้
อะฮ่า....ลองเลยดีก่า
step2: สร้างไฟล์เปล่าๆขึ้นมา 1 ไฟล์ก่อน
$touch scp.sh
ความหมาย: สร้างไฟล์ชื่อว่า scp.sh ครับ
step3: เปิดไฟล์ขึ้นมาแก้ครับ
$gedit scp.sh
ความหมาย: เรียกโปรแกรม gedit ที่เป็น text editor ตัวนึงขึ้นมาแก้ไขไฟล์ scp.sh โดยเนื้อหาในไฟล์ให้ใส่ลงไปประมาณนี้
(เอาตัวอย่างจาก net มานั่งโม)
#!/usr/bin/expect
spawn scp /var/log/report/report20080115.txt suchart@192.168.20.200:/media/data
expect "password:"
send "123456\n"
interact
ขั้นต่อมา rooney ขอชำแหละออกมาให้ดูกันทีละบรรทัด
#!/usr/bin/expect
ความหมาย: เรียกโปรแกรม expect ขึ้นมาทำงาน
spawn scp /var/log/report/report20080115.txt suchart@192.168.20.200
ความหมาย: ขอเริ่มจาก spawn ก่อนนะครับ spawn มันจะเอาไว้ใช้เรียกให้ process อะไรสัก process ให้รันขึ้นมา ในที่นี้คือ
สั่งรัน scp ครับ โดย
scp /var/log/report/report20080115.txt suchart@192.168.20.200:/media/data
คือให้ทำการ copy ไฟล์ชื่อ report20080115.txt ที่อยู่ตาม path ดังกล่าวไปยังเครื่อง ip address เบอร์ 192.168.20.200
โดยเก็บไว้ใน /media/data ของเครื่อง server และใช้ user ชื่อ suchart ในการ login เข้าเครื่อง server
expect "password:"
ความหมาย: ทางเราคาดหวังว่าทาง server จะร้องขอ password โดยขึ้น prompt มาถามยังงี้ ---> password:
send "123456\n"
ความหมาย: ส่ง password กลับไปให้ server โดย password คือ 123456 ส่วน \n หมายถึง enter ครับ
interact
ความหมาย: อันนี้ไม่แน่ใจ รู้สึกเหมือนกับว่าจะใช้ส่งการ control process ที่เราสั่งรันไปให้ user นั้นๆ(ใครเข้าใจกระจ่างแจ้ง
แวะมาขยายความหน่อยเน้อ)
*หลังจากเขียนลงไปทุกบรรทัดก็ทำการ save ไฟล์ครับ
step4: เปลี่ยน mode ของไฟล์สักหน่อย เดี๋ยวมันจะไม่ยอมรันเอาดื้อๆ
$chmod +x scp.sh
ความหมาย: เปลี่ยนโหมดให้ไฟล์ scp.sh สามารถ execute ได้
step5: ลองรัน script ดูครับ
$./scp.sh
เย่ ๆ ๆ สำเร็จ upload ไฟล์ได้แล้น password ก็ไม่ต้องกรอก 
*ปล. เนื่องด้วยขี้เกียจจะเขียนดังนั้นวันนี้พอแค่นี้ก่อน จริงๆแล้วยังมี script สำหรับทำ ftp อีกนะครับ แต่วันนี้ง่วงขออิ๊บไว้ก่อน
และถ้าว่างๆ จะสอนลงโปรแกรม expect แบบ compile เองจาก source ให้ครับ เผื่อเอาไปทำ shell robot บน linux
ตัวอื่นที่ไม่มี apt-get
Comments
อิ
อิ อิตามดูลิ้งค์น้องแนทของเฮีย เด็ดมากเลยเอีย สุดยอด
ท่าน rooney
ท่าน rooney ช่วยเสริมเรื่อง security ให้หน่อยครับ เพราะ script นี้ถ้ากำหนด
permission ไม่ดี user ธรรมดาจะอ่าน password ได้ หรือจะวาง script ใน
/root เอาไว้ใช้คนเดียว?
เอ่อ...
ผมใช้วิธีตั้ง permission ของไฟล์เป็น 700 เอาน่ะครับ แล้ว user ที่ใช้รัน script จะเป้น user ที่สร้างไฟล์และ user นั้นก็จะไม่เปิดให้ ssh เข้ามาได้จากเครื่องอื่น ส่วนใครใช้วิธีอื่นก็ลองแนะนำมาได้นะครับ ^_^
เทพจริงๆค
เทพจริงๆครับพี่ ขอบคุณมาก ไม่ต้องนั่งใส่ password ที่จะหลายๆรอบอีกแล้ว