นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน
อ่าน: 3385
ความเห็น: 11

PSU Auto Login พค. 54

หลังจากใช้งานมานานเกือบครบปี ก็ถึงเวลา update script ใหม่อีกรอบนึง

... ดูเหมือน ... คงต้องใช้คำว่า ดูเหมือน ... ยังไม่ยืนยัน 100%
เพียงแต่ script สำหรับการใช้ auto login เข้ากับตัว PSU firewall ที่ผมเคยใช้งานเป็นปกติมานาน อยู่ๆ ก็ใช้ไม่ได้ขึ้นมา

ตรวจสอบแล้ว (โดยการกลับไปใช้ web login และ ใช้ live http headers สำหรับ capture header ของ packet ใหม่อีกรอบ) พบว่ามีการเปลี่ยนแปลง 2 จุด

 1. หมายเลข port สำหรับการ authentication เปลี่ยนจากเดิม 6080 เป็น 6081 (เป็น 6082 เมื่อ 2011-05-20)

2. format ของการส่ง password ใน query string เปลี่ยนจาก pwd=xxx เป็น passwd=xxx

เลยต้องปรับแก้ script ใหม่ตามนี้ครับ

#!/bin/sh

# ---------------------------------------------------------------------    #
# psuautosigned        Signed-in with PSU Login to access internet.    #
#                                    #
# version 0.1        - cj (2010-06-11) modified from engautosign-3    #
# version 0.1a        - cj (2010-06-14) read login/password from user    #
#              if any of them doesn't provide from $CONF    #
# version 0.1b        - cj (2010-06-15) uses of function bug fixed.    #
#              thanks to aj. Panyarak for this.        #
# version 0.1c        - cj (2010-06-18) fix bug when receive login    #
#              and password from command line, thanks to     #
#              k. nagarindkx for finding this BIG bug.    #
# version 0.1d        - cj (2010-06-18) make it work with dash.    #
# version 0.2        - cj (2010-06-23) login page moved.        #
# version 0.2a        - cj (2010-06-24) logout supported.        #
# version 0.2b        - cj (2010-07-05) login page moved, again.    #
# version 0.2c        - cj (2011-05-12) login page changed, maybe    #
#              caused by OS upgrade.                #
# version 0.2d        - cj (2011-05-18) some bug still exists, need    #
#              to use address outside .psu.ac.th for the    #
#              first connection, or else we are stuck.    #
#              Also TIMEOUT added.                #
# version 0.2e        - cj (2011-05-20) port moved, address changed,    #
#              once again?                    #
# ---------------------------------------------------------------------    #

CONF="$HOME/.psuautosigned"
COOKIES="$HOME/.psuautosigned-cookies.txt"

TIMEOUT="--connect-timeout 3"
LOGIN="http://login.psu.ac.th/keepalive.php"
LOGINS="https://cp.psu.ac.th:6082"
LOGOUT="http://login.psu.ac.th/cgi-bin/logout-cp.cgi"

SIGNED="${LOGINS}/esp/uid.esp?url=${LOGIN}/&vsys=1"

# How long before we try refresh login page
SLEEPTIME=3600
RES="/tmp/.$$.html"

CURL="/usr/bin/curl"
[ ! -x $CURL ] && echo "Can't execute ${CURL}." && exit

# Read USER and PASS from configuration file
readconf() {
    USER=$(grep ^user= $CONF)
    PASS=$(grep ^passwd= $CONF)
    # support for old format 'user=xxx, pwd=yyy'
    [ -z "$PASS" ] && PASS=$(grep ^pwd= $CONF | sed -e 's/^pwd/passwd/')
    if [ -z "$USER" -o -z "$PASS" ]; then
        [ -z "$USER" ] && echo "Please set username 'user=' in $CONF"
        [ -z "$PASS" ] && echo "Please set password 'passwd=' in $CONF"
        exit
    fi
}

# Get USER and PASS from User
getuserpasswd() {
    # If we are running from terminal?
    [ "$(tty)" = "not a tty" ]        && \
        echo "Not running in terminal."    && \
        exit

    # Yes, we are in the terminal
    stty echo;    echo -n "User: ";    read USER
    stty -echo;    echo -n "Passwd: ";    read PASS; echo ""
    stty echo
    if [ -z "$USER" -o -z "$PASS" ]; then
        [ -z "$USER" ] && echo "User must be defined."
        [ -z "$PASS" ] && echo "Password must be defined."
        exit
    fi
    USER="user=$USER"
    PASS="passwd=$PASS"
}

# Signed-in
do_authen() {
    $CURL $TIMEOUT -s -S -k -L $LOGIN -c $COOKIES > $RES

    # Did we authenticated?
    if [ -z "$(grep '^Last refreshed' $RES)" ]; then
        # No, try authenticate first
        echo "Try authenticated at $(date)"
        $CURL    $TIMEOUT -s -S -k -L $SIGNED     \
            -c $COOKIES -b $COOKIES        \
            -d "$U"                \
            --data-urlencode "$P"        \
            -d "$O"                > $RES

        # Is it ok?
        [ -z "$(grep '^Last refreshed' $RES)" ]        && \
        echo "Failed to authenticated at $(date)"    && \
        { rm -f $RES; exit; }
    fi

    cat $RES                    |\
    egrep '^Last|Your'                |\
    sed    -e 's/<br>//'                \
        -e 's/ *Your IP Address is /: /'    \
        -e 's/ *<\/font>//'            |\
    tr '\n' ' '
    echo

    rm -f $RES
}

# Signed-out
do_logout() {
    echo "Logout request at $(date), please wait ..."
    $CURL $TIMEOUT -s -S -k -L $LOGOUT -c $COOKIES -b $COOKIES -d "" > $RES

    U=$(cat $RES | grep Login= | sed -e 's/^.*Login=//' -e 's/\r//')
    M=$(cat $RES | grep 'Back to Login' | cut -f3 -d\; | cut -f1 -d\<)
    if [ -z "$U" -o -z "$M" ]; then
        echo "Failed to logout..."
        exit
    fi
    echo "$U $M"
}

# Get authentication information
getautheninfo() {
    # if config file $CONF exist, read user/password from config file.
    if [ -f "$CONF" ]; then
        readconf
    else    # Then ask user to provide them.
        getuserpasswd
    fi

## The usual AUTHSTRING="${USER}&${PASS}&ok=Login"
## Separate AUTHSTRING to 'user=xxx' 'pwd=xxx' and 'ok=Login'

    O="ok=Login"
    U="$USER"
    P="$PASS"
}

### Main Start Here ###

action="$1"
# Set default action if argument is not provided.
[ "$action" = "" ] && action="login"

# Default usage it loop until the terminal is closed or the
# ^C is given.

case "$action" in
login)
    getautheninfo
    echo "-------------------------------------------"
    echo "Using default sleep value = $SLEEPTIME secs"
    echo "Please ^C to break from loop"
    echo "-------------------------------------------"
    while true; do
        do_authen
        sleep $SLEEPTIME
    done
;;
noloop)
    getautheninfo
    do_authen
    echo "Done."
;;
logout)
    do_logout
    echo "Logging out at $(date), goodbye."
;;
*)
    echo "Usage: $0 [login|logout|noloop]"
    exit
;;
esac

# ---------------------------------------------------------------------    #
# end of file.                                #
# ---------------------------------------------------------------------    #


script สามารถ download ได้จาก ที่นี่

คุณใหญ่ ส่งข่าวผ่าน facebook มาว่า script ตัวเก่ายังใช้งานได้ตามปกติ ผมไม่แน่ใจว่าจะเป็นสาเหตุเพราะมี firewall หลายตัวที่กำลัง upgrade อยู่หรือเปล่า ถ้ายังไงต้องการ script ตัวเก่า ก็สามารถ download ได้จาก ที่นี่

สำหรับท่านที่อ่านมาจนถึงบรรทัดนี้ แล้วยังไม่ค่อยเข้าใจว่าผมพูดถึงอะไร ... ก็ต้องขออภัย ที่ไม่ได้เล่าที่มา แต่ท่านสามารถกลับไปอ่าน บทความเก่าได้ ที่นี่ ครับ

หมวดหมู่บันทึก: เรื่องทั่วไป
สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ Copyright
สร้าง: 12 พฤษภาคม 2554 11:23 แก้ไข: 20 พฤษภาคม 2554 14:19 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

Ico48
Tan [IP: 192.168.101.4]
12 พฤษภาคม 2554 21:53
#65360

ผมเล่นตอนเช้าๆมันขึ้นให้ล็อกอิน

แต่ใส่รหัสแล้วมันก็เจ๊ง เมื่อสองวันก่อนหนะครับ

ทีแรกก็สงสัยว่าทำไมมันเป็น 6081 จากเดิมมัน 6080

Ico48
เจ้าเมือง [IP: 192.168.2.85]
18 พฤษภาคม 2554 08:59
#65449
ขอบคุณครับ

วันนี้เรียกไม่ได้เลยครับ ไม่รู้เป็นที่เว็บหรือ script

 yai@enterprise:~$ psuautosigned noloop
Try authenticated at ศ. 20 พ.ค. 2554 10:18:10 ICT
curl: (7) couldn't connect to host
Failed to authenticated at ศ. 20 พ.ค. 2554 10:18:10 ICT
yai@enterprise:~$ psuautosigned noloop
Try authenticated at ศ. 20 พ.ค. 2554 10:18:11 ICT
curl: (7) couldn't connect to host
Failed to authenticated at ศ. 20 พ.ค. 2554 10:18:11 ICT
yai@enterprise:~$ psuautosigned noloop
curl: (56) Recv failure: Connection reset by peer
Try authenticated at ศ. 20 พ.ค. 2554 10:18:12 ICT
curl: (7) couldn't connect to host
Failed to authenticated at ศ. 20 พ.ค. 2554 10:18:12 ICT
yai@enterprise:~$ psuautosigned noloop
Try authenticated at ศ. 20 พ.ค. 2554 10:18:14 ICT
curl: (7) couldn't connect to host
Failed to authenticated at ศ. 20 พ.ค. 2554 10:18:14 ICT
yai@enterprise:~$ psuautosigned noloop
curl: (56) Recv failure: Connection reset by peer
Try authenticated at ศ. 20 พ.ค. 2554 10:18:15 ICT
curl: (7) couldn't connect to host
Failed to authenticated at ศ. 20 พ.ค. 2554 10:18:15 ICT

ท่านเจ้าเมือง,
      PAN OS upgrade อีกรอบมั้งครับ หมายเลข port เปลี่ยนจาก 6081 -> 6082 และ เปลี่ยน URL ของการ authen เป็น https://cp.psu.ac.th:6082 จากเดิม https://login.psu.ac.th/6081

    Download script ตัวใหม่ได้ที่ link เดิมครับ

ฉัตรชัย
ขอบคุณครับ

หลังจากแก้ปัญหาในการปรับรุ่น PAN OS บนเครื่องพะโล้อยู่หลายวัน ตอนนี้ดูมีเสถียรภาพดีมากแล้ว

ขออภัยทุกๆ ท่านที่ทำให้การใช้งานของท่านขัดข้องครับ

(^_^)

สงกรานต์

 

Ico48
เคน [IP: 172.24.21.28]
08 ธันวาคม 2554 10:41
#72691

ไม่ทราบว่าเป็นภาษาอะไรครับ

Ico48
cj [IP: 172.30.2.126]
08 ธันวาคม 2554 14:59
#72700

@เคน เป็น shell script ธรรมดาครับ แต่ไปใช้ความสามารถของ curl ในการติดต่อผ่าน https protocol

Ico48
อนุรักษ์ [IP: 101.108.79.211]
25 มีนาคม 2555 10:54
#76079

recv() failed connection reset by peer ของผมขึ้นอย่างนี้ 3 วัน แก้ใขโดยการเข้า Facebook ด้วย firefox

แทน IE ก็จะเข้าได้ปกติครับ

Ico48
cj [IP: 182.53.186.193]
03 เมษายน 2555 20:19
#76344

คุณอนุรักษ์ครับ

ถ้าคุณมีทั้ง IE และ Firefox ให้ใช้งานแล้ว ผมก็ไม่แน่ใจว่า script psuautosigned จะเข้าไปเกี่ยวข้องยังไงครับ คือถ้ามีปัญหาในการ login เข้ากับ psu firewall เพื่อใช้งาน internet จากใน PSU ก็คงต้องแจ้ง ทีมผู้ดูแลเครือข่ายของมหาวิทยาลัยครับ ลองส่ง mail ไปที่ songkrant.m@psu.ac.th หรือใช้ sysaid.psu.ac.th ก็ได้ครับ

ฉัตรชัย

ปัจจุบันก็สามารถใช้งานได้อยู่ครับ

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 3.81.73.233
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ