teraterm使用ttl文件连接服务器

本文介绍如何使用Excel VBA来控制Teraterm进行远程登录操作,包括配置登录信息、执行远程命令及日志记录等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平常工作中直接打开ttermpro.exe在gui中连接linux服务器,最近接触到用excel控制teraterm的marco,学习了一下。留作记录。

vba代码

  • 读取excel文件里配置的信息,拼接成一个命令(字符串),在windows的cmd里执行。
  • 命令类似C:\work\teraterm\ttpmacro.exe /V C:\work\bin\slq.ttl 192.168.1.10 yourpassword"
Dim executeSheet As Worksheet
Dim configSheet As Worksheet
Dim HOSTADDR, PASSWORD, ttpmacro, ttl, result As String
Dim wsh As Object

Private Function init()
    Set executeSheet = ThisWorkbook.Worksheets("実行")
    Set configSheet = ThisWorkbook.Worksheets("設定")
    'HOSTADDR = executeSheet.Range("B4").Value
    HOSTADDR = "192.168.**.**"
    PASSWORD = "*******"
    
    'ttpmacroはteratermにインストールPATHであり,ttpmacro.exeの格納PATHでもあり
    ttpmacro = configSheet.Range("C2").Value
    
    ttpmacro = ttpmacro & "\ttpmacro.exe" 
    Set wsh = CreateObject("WScript.Shell")
End Function

Sub test1()
    Call init
    command1 = ttpmacro & " /V C:\works\bin\slq.ttl"
    command1 = command1 & Space(1) & HOSTADDR & Space(1) & PASSWORD
    result = wsh.Run(Command:=command1, WaitOnReturn:=True)
    MsgBox "result:" & result
End Sub

ttl文件(slq.ttl)

  • ttl文件里记录了 一些登录的信息,要在远程服务器执行的脚本,log相关。
  • param2,param3用来读取windows cmd执行的命令 的参数。
  • sendln 'ls’会在服务器输入ls并回车
  • 连续的sendln可能会有sendln被跳过,所以每个sendln前加个wait '#'或者wait ‘$’
  • LOGOPEN方法参考https://ttssh2.osdn.jp/manual/4/ja/macro/command/logopen.html,第一个1表示写入所有内容,第二个1表示追加写log。

binary flag の値が0のとき、受信した漢字、改行文字は変換されてファイルに書き込まれ、エスケープシーケンスは書き込まれない。
binary flag の値が0以外のとき、受信した文字をすべてそのままファイルに書き込む。

append flag の値が0以外で、ファイル がすでに存在する場合、そのファイルに追加して書き込む。
append flag の値が0で、ファイル がすでに存在する場合、そのファイルは上書きされる。

;;C:\**\ttpmacro.exe /V C:\**\slq.ttl 192.168.**.** yourpassword

;=========================================================== 
; 接続情報
;HOSTADDR = '192.168.**.**'
;USERNAME = 'teratermのlogin Username'
;PASSWORD = 'teratermのlogin Password'

;windows shellでのコマンドが "**\\ttpmacro.exe /V **\**.ttl 192.168.**.** your**password"ので、
;param2は192.168.**.**、param3はyour**password
HOSTADDR = param2
USERNAME = 'teratermのlogin Username'
PASSWORD = param3


; 接続オプション
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD

; 接続
connect COMMAND

;timeout=3			;timeoutの使用方法が わからない

wait '#'

;write log
getenv 'USERNAME' username
gettime timestr "%Y%m%d-%H%M%S"
getdir mdir
sprintf2 filename '%s\log_%s_%s.log' mdir username timestr

logopen filename 1 1
logwrite 'Log start'#13#10
logwrite '*******************************************'#13#10
logclose

wait '#'
sendln 'echo Start '

wait '#'
testdir='a'
;foldersearch folderが存在するかどうか調べる。
;存在する場合は、システム変数 result に1が返る。存在しない場合は、result に0が返る。
;filesearch fileが存在するかどうか調べる。
foldersearch testdir
;result:	0:ng	1:ok
messagebox result 'result'		
if result=0 then
;フォルダを作成する。 parent path need existing
	foldercreate testdir 
endif
messagebox result 'result'
foldercreate "a/b" 
messagebox result 'create a/b result'
;消息框,输入框
;inputbox <message> <title> [<default> [<special>]]
inputbox 'Password:' 'Login' 'zhang3'
messagebox inputstr 'input'


strdim msg 3
msg[0] = 'banana' 
msg[1] = 'apple' 
msg[2] = 'orange'
listbox 'select fruit' 'test2' msg
sprintf2 var "%d" result
messagebox var "result2"
; result
;   -1: Cancel
;    0: banana
;    1: apple
;    2: orange

times=-1
:retry
times=times+1
sprintf2 title 'retied %d times' times
yesnobox 'もう一回やりますか?' title
if result goto retry
end

;transfer file, it can be stoped before files are transfered,so maybe need to check,
;such as https://qiita.com/KurokoSin/items/b4d2d0a81c8d05f110ef
;scprecv '/remote/bad/1.log' 'C:\work1\111.log'
;ng:  scprecv '/remote/bad/a.log' "C:\work1\11\"
;scprecv '/remote/bad/a.log' "C:\work1\111\1.log"

;scpsend 'C:work2\1.log' '/remote/bad/'
;scpsend 'C:work2\2.log' '/remote/bad/'
;scpsend 'C:work2\bin.txt' '/remote/bad/'
;scpsend 'C:work2\1.log' '/remote/bad/a.log'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值