2018-11-18

Tcl/Expect: Auto login to PTT BBS (using ssh) on Linux

使用 expect 套件:
#!/usr/bin/env tclsh

#
# A script to login ptt BBS
# tclsh -encoding big5 login.tcl host user username password
#
package require Expect

set timeout 60

encoding system big5
spawn ssh [lindex $argv 1]@[lindex $argv 0]

expect "請輸入代號,或以 guest 參觀,或以 new 註冊:" {
    exp_send "[binary decode base64 [lindex $argv 2]]\r"
    expect "請輸入您的密碼:" { exp_send "[binary decode base64 [lindex $argv 3]]\r" }
}

interact

我只是將 username/password 使用 base64 編碼,所以這裡需要解回來。然後這個 script 需要使用 BIG5 編碼存檔(執行時也需要使用 -encoding 設定編碼)。

然後寫一個 script 呼叫這個 tcl script,下面是一個例子:
#!/usr/bin/env bash

tclsh -encoding big5 ~/bin/login.tcl ptt.cc bbs dXNlcg== cGFzc3dk

再來將這個 shell script 設為可執行,就可以執行以後自動登入 PTT BBS。

沒有留言: