使用vpn,每次都要在terminal上重複輸入命令:
ssh -d port user@host
出來密碼提示符後,把複雜的密碼拷貝下來,然後貼上到terminal,敲回車...
終於忍受不了這樣的重複了,於是用shell寫乙個可以自動登入的指令碼:
shell script**
#!/usr/bin/expect -f
set port port_no
set user user_name
set host host_name
set password my_password
set timeout -1
spawn ssh -d $port $user@$host
expect "*assword:*"
send "$password\r"
expect eof
把上面的**命名成vpn,並設定755的許可權之後,使用起來就方便了:./vpn。
上面指令碼中的自動互動用到了expect,那麼什麼是expect呢?
expect是乙個基於tcl的用於自動互動操作的工具語言,它適合用來編寫需要互動的自動化指令碼,比如上面提到的ssh輸入使用者名稱密碼,自動ftp等等場景。
除了具有tcl的語法,expect提供了幾個常用的命令:
1. send
用來傳送乙個字串,比如 send "hello world"。
初始情況下,這個字串會傳送到標準輸出。如果你用的是max osx或者linux,可以在terminal下直接輸入expect命令並回車,就進入了expect互動環境,此時,輸入send "hello world"就可以看到結果。
一旦你的程式已經與其他程式進行互動,字串就會被傳送到其他程式那裡。如上面的例子指令碼中,我們呼叫send 」$password\r"就是把密碼傳送給ssh連線的伺服器端指定埠。
2. expect
與send相反,expect用來等待你所期望的字串。比如expect "hello"
在expect後面跟的字串中,你可以指定乙個正規表示式。
expect會一直等待下去,除非收到的字串與預期的格式匹配,或者到了超期時間。
3. spawn
spawn用來啟動乙個新的程序,比如上面的spawn ssh -d $port $user@$host,expect會執行命令「ssh -d $port $user@$host」。
在互動式的場景中,當你輸入命令後,可能伺服器端會返回一些操作提示符,以讓你輸入命令。expect提供了這樣三個常用的命令,spawn, expect和send,恰好滿足這種需要。把它們結合起來使用,可以實現很多簡單的自動化指令碼。
其它常用的命令還有:interact,比如你通過指令碼自動連線到了某個ftp,並輸入了使用者名稱密碼,此時需要人工輸入一些命令,就可以使用interact命令,它會把指令碼的控制權交給使用者;sleep,等待多少秒等等。
由於expect是從tcl繼承下來的,所以也支援tcl的語法和命令,比如變數宣告、流程控制等等。
上面指令碼的一些解釋:
1. set timeout 300:設定超時時間300s。如果設為-1,代表永不超時。
2. expect eof:等待接受檔案結束符。
Git 自動儲存使用者名稱密碼
清空了git的賬戶設定,於是每次更新都需要重新輸入使用者名稱及密碼。所以需要設定 輸入一次之後自動儲存使用者名稱及密碼 安裝配置好git後,在c 使用者 administrator 目錄下有乙個 gitconfig 的檔案,這就是git的配置檔案,開啟這個檔案,裡面會有你先前配好的name 和ema...
儲存的使用者名稱和密碼
在windows xp pro裡,經常需要訪問 儲存使用者名稱和密碼 對話方塊,例如增加遠端計算機的訪問憑據,或者刪除microsoft passport的登入資訊。但是這個元件隱藏的比較深,可以借助以下兩種方式 1.在控制面板裡開啟 使用者帳戶 選擇當前登入帳戶,然後單擊左上方的 管理我的網路密碼...
tomcat的使用者名稱和密碼
在tomcat使用startup 啟動之後,訪問本機8080埠會自動進入tomcat的管理介面,其中 下面這三個功能需要使用者名稱和密碼,才能訪問,否則就會出現403許可權不夠的情況,那tomcat的使用者名稱和密碼在哪儲存呢?1 通過訪問失敗的這段英語我們可以很清晰的看到 在conf 下有乙個to...