在現在的這個公司一直使用tera term來遠程連接服務器,感覺很方便,特別是它的ttl腳本配置的自動連接。有時候我們可能無法直接連接到目標服務器,需要通過ssh經過多個中間服務器才能連接到目標服務器。如果此時讓我們在終端下一行一行命令的敲,實在是很煩的一件事情,我遇到過的最多的是中間經過三次服務器的ssh才連接到了目標服務器。雖然都是Ctrl+c 、Ctrl+v 。但是每天一上班就開好幾個終端每次到這么一個一個敲很麻煩,而tera term的ttl腳本就幫助我們解決了這個問題。
Tera Term
這是一個類似於putty這樣的一個遠程連接的終端軟件,通常就是那些ssh、ftp、sftp、scp的協議使用的瀏覽linux系統的遠程連接軟件(本人自己的體會,哈哈、、、)
這是一個日本人開發的軟甲,小鬼子做的還是很不錯的。網上找了找資料發現資料比較少,那共享一下我的理解。也用過一段時間的putty,但是沒有發現putty有類似的功能。每次都要輸入用戶名,密碼,然后ssh命令,然后又是密碼,真是很煩!tera term的ttl腳本就幫助我們解決了問題
相關資料:
tera term 英文官網:http://www.teraterm.net/manual/en/
ttl 命令手冊:http://www.teraterm.net/manual/en/macro/command/index.html
這里在貼一片博文(http://my.oschina.net/u/183789/blog/37469)
介紹幾個常用的命令
a. 通過Tera Term連接PFC所在的機器以及斷開連接
通過TTL的connect/disconnect命令實現
Connect:
connect '192.168.137.27 /ssh /auth=password /user=username /passwd= passwd'
注:其中username是用戶名,passwd是密碼
Disconnect:
注:disconnect后面指定參數,這樣就不彈出確認框了。
b. 通過log記錄全程操作過程,最終通過比對log確認測試結果。
通過logopen/logclose命令來寫log
logopen:
logopen filename 0 1 1
注:filename最好設成命令名,不通ttl腳本不要重復。也可以帶執行的時間,
例如:Show_candidate_config_ 20110426-130939.log
方法如下:
gettime timestr "%Y%m%d-%H%M%S"
getdir mdir
logclose :
logclose
c. 測試項作成時可能用到的命令
Pause:(暫停)
pause <time>Remarks:Pauses for <time> seconds.
Sendln:(發送命令並換行)
sendln <data1> <data2>....
Remarks:Causes Tera Term to send characters followed by a new-line character to the host.
Send:(發送命令)
send <data1> <data2>....
Remarks:Causes Tera Term to send characters to the host.
If <data> is a string, the string is sent to the host.
If <data> is an integer, its lowest-order byte (0-255) is regarded as an ASCII code of the character, and the character is sent to the host. 例如:按Tab鍵的命令是send #9
wait:(等待匹配的字符串出現)
wait <string1> [<string2> ...]
Remarks:Pauses until one of the character strings is received from the host, or until the timeout occurs. Maximum number of the strings is 10.
注:使用這個命令是需要設置timeout時間,命令的返回結果保存在resault變量中,當resault為時,則為超時。Timeout 設置命令如下:
timeout=1 /*等號后面的值為整數,設為負則是無限等待*
waitln:(等待整行匹配的字符串出現)
waitln <string1> [<string2> ...]
Remarks:Pauses until a line which contains one of the character strings is received from the host, or until the timeout occurs. Maximum number of the strings is 10.
注意點同上 其他命令例如if,then,elseif,else,endif,goto等請參考help文件。
腳本作成的注意點
a. 不同的ttl腳本內指定的Log文件名不能重復。
b. 腳本的最后部分請清空測試環境,以便下一個ttl腳本執行。
c. 在執行比較緩慢的地方,例如連接機器時,請追加pause命令
d. 腳本盡量寫得簡潔短小,以便式樣發生變更時易於更改。
e. 必要的時候可以追加注釋
使用例子:
1,在window下創建bat文件,
"C:\Program Files\teraterm\ttpmacro.exe" "D:\My Kownhow\TTL\test.ttl"
exit2,生產ttl腳本文件test.ttl
;###connect host
connect '172.28.92.23 /ssh /auth=password /user=root /passwd=password'pause 1
;###create log
gettime logstr "log-%Y%m%d-%H%M%S.txt"
getdir curdir
sprintf '%s\%s' curdir logstr
filename = inputstr
logopen filename 0 1 1
logwrite 'Log start'#13#10looptimes = 1 ;
while looptimes < 11
;###run cmdsendln "ls -l"
wait "#"
looptimes = looptimes + 1
endwhile;###closelog
Logclose;###disconnect
disconnect
closett執行bat文件就可以運行ttl腳本了.
然后來看看我的ttl配置文件
;++++++++++++++++++++++++++++++++++++++++++++ ; tera term 連接腳本 ; 下面的是定義變量的方式 ; 這里我們設置 主機名Host ; 用戶user1 ; 密碼password1 ;++++++++++++++++++++++++++++++++++++++++++++ Host = '192.***.***.***' User1 = '*******' Password1 = '******' Ini = 'TERATERM.INI' Prompt1 = '$' PromptPW = 'suDyzVs83y' Df = 'df' ; 設置一個字符Cmd為一個空字符串 ; strconcat 是拼接字符串,我們可以看到下面進行了一系列的拼接, ; Cmd 最終的效果像這樣:'192.***.***.*** /ssh /auth=password /user=username /passwd= passwd' Cmd = '' strconcat Cmd Host strconcat Cmd ' /ssh /1 /auth=password' strconcat Cmd ' /user=' strconcat Cmd User1 strconcat Cmd ' /passwd=' strconcat Cmd Password1 strconcat Cmd ' /f=' strconcat Cmd Ini ; connect 連接命令 (圖 1) ; 也就是: connect '192.***.***.*** /ssh /auth=password /user=username /passwd= passwd' connect Cmd ; wait (等待匹配的字符串出現) 圖 2 ; sendln (發送一行字符后換行) ; 等待bash出現的$符號 wait '$' ; 通過ssh連接 sendln 'ssh wangxb@***.***.***.***' ; 這里是等待要求輸入密碼的 ':' wait ':' ; 輸入密碼 sendln '****' ; 登錄成功切換到相應目錄 圖 3 wait '$' sendln 'cd /home/***' wait '$' ; 這里還是通過ssh連接到另外一台服務器,之所以上面要切換目錄是因為這個目錄項目有我們ssh連接時不使用密碼登錄要求的 私鑰 ; 如果有興趣可以了解一下ssh 這個協議命令 sendln 'ssh -i ***_private.pem homepage@210.***.***.***' ; 下面的這幾條語句也是等待匹配 ':' 來輸入密碼的 wait ':' ; 這里的密碼是空的 圖 4 sendln '' wait ':' sendln '*****' ; 切換root用戶 圖 5 wait '$' sendln 'su -' wait ':' sendln '*****' ; 這里之所以等待 '#' 是因為我們上面切換到了root ,所以匹配 # wait '#' ; 切換目錄 圖 6 sendln 'cd /var/www/www.****.jp.net' ;++++++++++++++ 總結 ++++++++++++++++++++++ ; 當我們配置自動連接的 ttl腳本時,我們很難一次 ; 弄正確,沒關系,我們可以根據我們的實際情況, ; 首先連接到第一台服務器,然后其實很簡單,只是 ; 在我們平時需要切換到目標服務器的命令在這里用 ; wait 和sendln 匹配就可以了, ; 我們不一定都是 wait '$' 這樣根據我們到了這一 ; 步,系統顯示的是什么,是':' 那就 wait ':', ; 是 '#' 那就wait '#' 然后寫上我們在命令行的 ; 命令通過sendln, ; 當我們完成一部分ttl編寫時,我們可以去試着連 ; 接一下,看看是哪里出了問題,然后再來修改,這 ; 樣,一步一步就出來了 ;++++++++++++++++++++++++++++++++++++++++++++ restoresetup Ini
我們平時可以用的的基本也就是這些簡單的語法,更加復雜的大家可以去官網學習,下面貼出上面腳本執行的時序圖,自行對應啊。
圖 1
圖 2
圖 3
圖 4
圖 5
圖 6
好吧,就簡單這么做個記錄,希望可以幫到別人!如果有什么不清楚的地方,歡迎提問,歡迎轉載。