แจ้งเตือนเข้าไลน์กลุ่ม ผ่าน Line notify เมื่อมีคน login เข้า server ของเราผ่าน SSH (linux) หรือ remote desktop เข้ามา (windows server)
เนื่องจาก server ที่ทำงานผมส่วนใหญ่เป็น Linux และ Windows server มีจำนวนหลายตัวในความดูแล มี admin หลายคนช่วยกันดูแล เพื่อความปลอดภัย จึงอยากทำระบบขึ้นมา หากมีใครพยายาม Login เข้า server เพื่อจะทำอะไร จะให้แจ้งเตือนเข้าไลน์กลุ่มของผู้ดูแลระบบ ไม่ยากครับ
สำหรับการสมัคร line notfiy สามารถหาอ่านได้จากเว็บทั่วไป หรือจากบทความเก่าๆ ของผมได้น่ะครับ https://havespirit.blogspot.com/2017/02/line-notify-php.html ในบทความนี้จะไม่ขอกล่าวถึงการสมัคร Line notify น่ะครับ หลังจากสมัครแล้ว ก็ให้เชิญเข้ากลุ่มที่จะแจ้งเตือน และเราจะเอา Line token มาใช้
สำหรับ Linux การ ssh เข้าไปเป็น root น่ะครับ ส่วน user อื่น ก็แก้ไขได้ครับ เปลี่ยนจาก /root เป็น user ที่เราต้องการครับ
สำหรับ windows server เมื่อมีการ remote desktop เข้าไปทำงาน มันจะแจ้งเตือนผ่านไลน์กลุ่ม ว่ามีคน remote desktop เข้า server มีการทำ 2 ส่วน คือ code php สำหรับการแจ้งเตือนผ่าน Line notify ต้องไปสมัคร Line notify ก่อนน่ะครับ ไม่ยาก
สำหรับ Linux centos
เข้าไปแก้ไขได้ที่ vi /root/.bash_profile
////////////////////
[root@localhost ssh]# vi /root/.bash_profile# .bash_profile# Get the aliases and functionsif [ -f ~/.bashrc ]; then. ~/.bashrcfi# User specific environment and startup programscurl -X POST -H 'Authorization: Bearer [LINE-TOKEN ของเราครับ]' -F 'message=Server 10.152.7.111 have SSH login' https://notify-api.line.me/api/notifyPATH=$PATH:$HOME/binexport PATHunset USERNAME"~/.bash_profile" 13L, 360C written[root@localhost ssh]#//////////////////////////////
หน้าจอ ทดสอบการ Login ผ่าน SSH
หน้าจอ Line group หลังจาก login ผ่าน SSH เข้ามา server เรา
สำหรับ windows server 2008 R2
**** ( 2017-03-12 บางทีมันก็ไม่ทำงานครับ ให้ไปใช้ python แทน code อยู่ด้านล่างครับ ***
ต้องทำ 2 ส่วนด้วยกันครับ
1. สร้าง code php สำหรับให้ server เรียกใช้ เวลา remote เข้าไป ดังนี้ครับ
/////////////////////////////
<?php
//$message = $_REQUEST['message'];
$message = 'ไอพีของserver ';
$chOne = curl_init();
curl_setopt( $chOne, CURLOPT_URL, "https://notify-api.line.me/api/notify");
// SSL USE
curl_setopt( $chOne, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt( $chOne, CURLOPT_SSL_VERIFYPEER, 0);
//POST
curl_setopt( $chOne, CURLOPT_POST, 1);
// Message
curl_setopt( $chOne, CURLOPT_POSTFIELDS, $message);
//ถ้าต้องการใส่รุป ให้ใส่ 2 parameter imageThumbnail และimageFullsize
curl_setopt( $chOne, CURLOPT_POSTFIELDS, "message=$message&imageThumbnail=http://10.10.10.10/server_login.PNG&imageFullsize=http://10.10.10.10/server_login.PNG");
// follow redirects
curl_setopt( $chOne, CURLOPT_FOLLOWLOCATION, 1);
//ADD header array
$headers = array( 'Content-type: application/x-www-form-urlencoded', 'Authorization: Bearer [ไลน์token ที่ได้มาจากการสมัคร line notify]', );
curl_setopt($chOne, CURLOPT_HTTPHEADER, $headers);
//RETURN
curl_setopt( $chOne, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec( $chOne );
//Check error
if(curl_error($chOne)) { echo 'error:' . curl_error($chOne); }
else { $result_ = json_decode($result, true);
echo "status : ".$result_['status']; echo "message : ". $result_['message']; }
//Close connect
curl_close( $chOne );
?>
////////////////////////////
2. ส่วนของ windows ต้องมาสร้าง scheduler หรือให้มันทำงานอัตโนมัติ
หลักการทำงานของมันคือ เมื่อมีการ remote desktop มายัง server ระบบก็จะไปเรียก chrome ซึ่งจะไปเปิด code php อีกที
วิธีการทำ
Administrative tools -> Task Scheduler
จากนั้น คลิ๊กขวาที่ Task Scheduler แล้ว เลือก New Folder สร้างชื่อ
หลังจาก new folder แล้ว คลิ๊กขวา ที่ folder แล้วเลือก create task
จากนั้นเลือก trigger เลือก connection from remote computer
เลือก Actions -> browse program ไปที่ chrome
ของผม path อยู่ที่นี้ครับ "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
แล้ว add agrument เป็น url code php ที่เราทำ Line notfiy ไว้ ตัวอย่าง http://10.10.10.10/server.php
ผลลัพธ์ที่ได้
edit 2017-03-12
เนื่องจากพบว่า บางครั้ง เมื่อ login เข้า windows มันก็ไม่ยอมทำงาน จึงขอแนะนำอีกวิธีครับ ที่ค่อนข้างแม่นยำ คือ ลง Python 2.7 ที่ เครื่อง windows แล้ว ใช้ code นี้ครับ
//// code login.py ///
import requests,json
#import urllib.parse
LINE_ACCESS_TOKEN="xxxxxxxxxxxxxxxxxxx"
url = "https://notify-api.line.me/api/notify"
msg = {"message":"192.168.1.10 Login"} #message
LINE_HEADERS = {'Content-Type':'application/x-www-form-urlencoded',"Authorization":"Bearer "+LINE_ACCESS_TOKEN}
session = requests.Session()
resp =session.post(url, headers=LINE_HEADERS, data=msg)
print(resp.text)
///////////////////
เปิด Task Scheduler กำหนด Triggers ให้เป็น At log on
กำหนด Action ให้เป็น run code python ในเราสร้าง โดย browse ไปที่ python
และให้ใส่ path ของ code python ที่ Add agrument
/////////////////////////////////////////
รบกวนหน่อยครับ
ตอบลบพอดีลองบน Ubuntu เเล้วเจอ error นี้ครับ
{"status":401,"message":"Invalid access token"}-bash: ~/.bash_profile: No such file or directory
โดยในไฟลล์ .profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
curl -X POST -H 'Authorization: Bearer [juzLp6wIBfuZXXXXXXXXXXXX]' -F 'message=INutCorp-WebServ have SSH login' https://notify-api.line.me/api/notify
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
"~/.bash_profile" 13L, 360C written
ลองดูนะครับ LINE-TOKEN น่าจะไม่ต้องใส่ [] ครับ
ลบในส่วนของ Line-Token เหมือนที่คุณ Teerawat H. บอกน่ะครับ คือไม่ต้องมีเครื่องหมาย [ ]
ลบลองและครับ error เหมือนเดิมเลยครับ
ลบ# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
curl -X POST -H 'Authorization: Bearer rFSdk2Ux4XyulxHF4A7JDKcM4r3ZyRfinESeqPMbEWN' -F 'message=Server 128.19x.xxx have SSH login' https://notify-api.line.me/api/notify
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
"~/.bash_profile" 13L, 360C written
error msg;
Last login: Mon Feb 27 06:12:05 2017 from 202.183.xxx
{"status":401,"message":"Invalid access token"}-bash: ~/.bash_profile: No such file or directory
root@INutCorp:~#
อ่ออได้และครับ เป็นที่ ""~/.bash_profile" 13L, 360C written"
ลบบน Ubuntu มันใม่มี .bash_profile แต่มันใช้ .profile แทนครับ
ขอบคุณครับ_/\_
สอบถามหน่อยครับตรง
ตอบลบcurl -X POST -H 'Authorization: Bearer [LINE-TOKEN ของเราครับ]' -F 'message=Server 10.152.7.111 have SSH login' https://notify-api.line.me/api/notify
เลข 10.152.7.111 คือเลขไอพีของอะไรครับ
ผมคิดว่าส่วน message เป็นข้อความที่ต้องการให้แจ้งเตือนครับ สามารถใส่อะไรก็ได้ เจ้าของบทความน่าจะใส่ IP ของ Server เข้าไปจะได้ทราบว่า Login เข้าที่เครื่องอะไรครับ
ลบใช่เลยครับ เหมือนที่ คุณ Teerwat H. ตอบเลยครับ จะเปลี่ยนเป็นข้อความอะไรก็ได้ หรือชื่อ server แทนก็ได้ครับ เช่น DNS
ลบรบกวนสอบถามเพิ่มเติมหน่อยครับ ถ้ามีหลาย Server สามารถทำได้มั้ยครับ และแจ้งรายละเอียดของ server ได้มากกว่านี้มั้ยครับ
ตอบลบสำหรับความเห็นผมน่ะครับ
ตอบลบ1. ก็คงส่ง parameter คือ ชื่อ ip ของเครื่องไปด้วย แล้วในส่งของ php ก็สร้างตัวแปรรับค่า ip มาแสดงในส่วนของ message
2. ก็คงทำ php หลายๆ ไฟล์ สำหรับ server ตัวนั้นครับ
ในส่วนของรายละเอียด server สามารถเพิ่มเติมได้ครับ หรือจะเขียน script ส่งค่าพวก cpu disk ram ไปด้วยก็ได้ครับ แต่ในส่วนนี้ผมยังไม่ได้ทำ
เกิด error {"status":401,"message":"Invalid access token"}-bash: ~/.bash_profile: No such file or directory เหมือนกัน ใช้ centos
ตอบลบคำว่า no such file or directory น่าจะบอกว่าไม่มี /root/.bash_profile ครับ หรืออาจจะเป็นชื่ออื่นครับ หรือ user อื่น ครับ ลองตรวจสอบดูน่ะครับ
ลบcentos ลบ [] ตรง access token ครับ
ลบMYIP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
ตอบลบ#ดูด IP เครื่องครับ เอา eth0 มาอย่างเดียวถ้าเป็นไอพีตัวอื่นก็ลองแก้ดูครับ
REMOTE_IP=`who am i` #ดูด ip remote มาครับ
CUTIP=${REMOTE_IP%)*}
CUTIP=${CUTIP##*(}// ตัดให้เหลือเฉพาะ ip ครับ
curl -X POST -m 2 -F 'message=Server "'"$MYIP"'" have SSH login via IP "'"$CUTIP"'"' http://172.20.1.121/line_message.php > /dev/null 2>&1
#ของผมไม่ให้ server ยิงออกให้ยิงออกตัวที่ต่อเน็ตไว้ครับ เอาใส่ไว้ใน .bash_profile ใช้ได้ดีครับ ลองทดสอบดูครับ
# มีแก้ตรงไหนแปะให้ด้วยนะครับ
ขอบคุณสำหรับคำแนะนำดีดี ครับ :)
ลบถ้าแบบนี้
ลบcode บน linux อาจแก้ตรงบันทัด เป็น http://172.20.1.121/line_message.php?ip=$MYIP ประมาณนี้
อาจต้องเขียน code php รับค่าไอพีด้วยก็ได้ครับ โดย code php ให้ เพิ่มตัวแปรรับไอพี ครับ ประมาณนี้
$ip = $_REQUEST['ip'];
ลบ...
...
curl_setopt( $chOne, CURLOPT_POSTFIELDS, "message=$ipถูกlogin&imageThumbnail=http://10.10.10.10/server_login.PNG&imageFullsize=http://10.10.10.10/server_login.PNG");
...
เยี่ยมมากค่ะ
ตอบลบผมลอง ubuntu 16.04
ตอบลบcurl -X POST -H 'Authorization: Bearer xxxxxx' -F 'message=Server 172.16.0.xxx have SSH login' https://notify-api.line.me/api/notify
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
"~/.profile" 13L, 360C written
ไม่ได้ครับ
มันขึ้น error ว่ายังงั้ยบ้างครับ
ตอบลบ{"status":401,"message":"Missing authorization header"}.profile: command not fou nd
ลบครับ
Centos ก็เหมือนกันครับ
ลบจาก code นี้ ตรง line-token จะไม่มีเครื่องหมาย[] น่ะครับ พอดีผมใส่ไว้เฉยๆ เพื่ออธิบาย curl -X POST -H 'Authorization: Bearer [LINE-TOKEN ของเราครับ]' -F 'message=Server 10.152.7.111 have SSH login'
ลบความคิดเห็นนี้ถูกผู้เขียนลบ
ตอบลบอยากถามว่าถ้าเป็น ในเคลือบริษัทนี้ต้องใช้ administrator ปะครับ
ตอบลบของผมยังไม่เข้าใจตรง add agrument เป็น url code php ที่เราทำ Line notfiy ไว้อ่ะครับ เป็น path ที่ไปเรียก file .php เหรอครับ
ตอบลบcurl: (6) Couldn't resolve host 'notify-api.line.me'
ตอบลบมันบอกว่าอย่างนี้น่ะครับ เหมือนมันติดต่อ host ไม่ได้ ทำไงดีครับ
ขึ้นแบบนี้ครับ curl: (35) error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm
ตอบลบความคิดเห็นนี้ถูกผู้เขียนลบ
ตอบลบขอวิธีเตือนการเข้า Server โดยผ่าน sftp ด้วยครับ
ตอบลบcurl -X POST -H 'Authorization: Bearer XXXXX' -F 'message=Test Email' https://notify-api.line.me/api/notify
ลบส่ง message ไม่ได้เลยค่ะ
ทำแบบแจ้งรหัสการเข้าแบบ otp ได้ไหมครับ ประมาณว่าให้ระบบส่งรหัสไปที่ไลน์ แล้วกรอกรหัสตามในไลน์ ถึงจะเข้าระบบได้
ตอบลบ