为Telnet会话创build一个脚本?
有谁知道一个简单的方法来创build一个脚本,可以连接到远程login服务器,做一些通常的远程login的东西,然后注销? 我正在处理不熟悉telnet的用户以及他们需要运行的命令。 我只想让他们双击一个脚本,让脚本自动执行它们的命令。
您可能想知道:“用户在哪个平台上? 他们将在Windows和Linux上。 Perl,Java或Python等语言的实现是可以接受的。 我看到Perl有一个Net :: Telnet模块。 有没有人使用过?
我的理想解决scheme是创build两个脚本文件。 Windows的BAT文件,以及Linux的shell脚本。 虽然这会使双重维护成为问题,但这意味着我不必在每台机器上安装Perl / Java / Python /等等。 不幸的是,我还没有看到用batch file或shell脚本自动化telnet会话的方法。
谢谢。
Expect是为此而构build的,可以处理input/输出以及超时等。请注意,如果您不是TCL粉丝,那么可以使用Perl / Python / Java的Expect模块。
编辑:上面的页面build议维基百科期待条目是一个有用的资源:-)
我已经使用了各种方法在UNIX下对telnet会话进行脚本编写,但最简单的方法可能是一系列echo和sleep命令,并将其输出传送到telnet。 输出到另一个命令也是一种可能性。
愚蠢的例子
(echo password; echo“show ip route”; sleep 1; echo“quit”)| telnet myrouter
这(basicallly)检索Cisco路由器的路由表。
另一种方法是使用与vatine相同格式的netcat(或nc,取决于哪个posix),或者您可以创build一个文本文件,其中包含每条命令的文本文件。
我发现一些posix的telnet不能正确处理redirect(这就是为什么我build议使用netcat)
这个vbs脚本重新加载一个cisco交换机,确保telnet安装在windows上。
Option explicit Dim oShell set oShell= Wscript.CreateObject("WScript.Shell") oShell.Run "telnet" WScript.Sleep 1000 oShell.Sendkeys "open 172.25.15.9~" WScript.Sleep 1000 oShell.Sendkeys "password~" WScript.Sleep 1000 oShell.Sendkeys "en~" WScript.Sleep 1000 oShell.Sendkeys "password~" WScript.Sleep 1000 oShell.Sendkeys "reload~" WScript.Sleep 1000 oShell.Sendkeys "~" Wscript.Quit
这听起来不是一个好主意,但我使用java,并使用简单的TCP / IP套接字编程连接到一个telnet服务器并交换通信。 如果你知道实现的协议,它就可以完美工作。 对于SSH等,可能会很难,除非你知道如何做握手等,但简单的telnet工程就像一个享受。
另一种方法,我尝试了,在java System.exec()等使用外部过程,然后让内置在远程login的窗口为你做的工作,你只是发送和接收数据到本地系统进程。
检查SendCommand工具 。
你可以使用它如下:
perl sendcommand.pl -i login.txt -t cisco -c "show ip route"
import telnetlib user = "admin" password = "\r" def connect(A): tnA = telnetlib.Telnet(A) tnA.read_until('username: ', 3) tnA.write(user + '\n') tnA.read_until('password: ', 3) tnA.write(password + '\n') return tnA def quit_telnet(tn) tn.write("bye\n") tn.write("quit\n")
几个问题:
- 你可以把东西放在你远程login的设备上吗?
- 脚本执行的命令是否相同,或者是否因机器/用户而异?
- 你想要点击图标的人必须提供用户名和/或密码吗?
也就是说,我前一段时间写了一些Java,与一些可能对您有用的IP电源板(BayTech RPC3)交谈。 如果你有兴趣,我会看看我是否可以把它挖出来放在某个地方。
我喜欢使用python的Active State给出的例子。 这是完整的链接 。 我从链接中添加了简单的日志,但是你可以得到你能做的事情的要点。
import telnetlib prdLogBox='142.178.1.3' uid = 'uid' pwd = 'yourpassword' tn = telnetlib.Telnet(prdLogBox) tn.read_until("login: ") tn.write(uid + "\n") tn.read_until("Password:") tn.write(pwd + "\n") tn.write("exit\n") tn.close()
Bash shell支持这个开箱即用的,例如
exec {stream}<>/dev/tcp/example.com/80 printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream} grep Example <&${stream}
虽然没有直接关系到你的问题,但我build议你使用ssh代替,因为你可以通过它执行特定的命令(再加上默认情况下更安全)。
在BAT Dos文件中写入telnet会话并执行。