42

有谁知道创建可以连接到远程登录服务器的脚本的简单方法,执行一些常用的远程登录操作,然后注销?我正在与不熟悉 telnet 以及他们需要运行的命令的用户打交道。我想要的只是让他们双击一个脚本,并让该脚本自动为他们执行命令。

您可能想知道,“用户在哪个平台上?” 它们将在 Windows 和 Linux 上运行。Perl、Java 或 Python 等语言的实现是可以接受的。我看到 Perl 有一个 Net:: Telnet 模块。有人用过吗?

我理想的解决方案是创建两个脚本文件。Windows 的 BAT 文件和 Linux 的 shell 脚本。虽然这会使双重维护成为问题,但这意味着我不必在每台机器上安装 Perl/Java/Python/etc...。不幸的是,我还没有看到任何使用批处理文件或 shell 脚本自动执行 telnet 会话的方法。

谢谢。

4

11 回答 11

40

我使用了多种方法在 unix 下编写 telnet 会话脚本,但最简单的方法可能是一系列 echo 和 sleep 命令,它们的输出通过管道传输到 telnet。也可以将输出通过管道传输到另一个命令中。

愚蠢的例子

(回显密码;回显“显示IP路由”;睡眠1;回显“退出”)| 远程登录我的路由器

这(基本上)检索 Cisco 路由器的路由表。

于 2009-04-02T14:04:12.807 回答
14

Expect就是为此而构建的,它可以处理输入/输出以及超时等。请注意,如果您不是 TCL 粉丝,可以使用 Perl/Python/Java 的 Expect 模块。

编辑:上面的页面表明Wikipedia Expect条目是一个有用的资源:-)

于 2009-04-02T14:02:31.703 回答
12

另一种方法是使用与 vatine 显示相同格式的 netcat(或 nc,取决于哪个 posix),或者您可以创建一个文本文件,在其自己的行中包含每个命令。

我发现一些 posix' telnet 不能正确处理重定向(这就是我建议使用 netcat 的原因)

于 2009-04-02T14:39:00.570 回答
8

此 vbs 脚本重新加载 cisco 交换机,确保在 windows 上安装了 telnet。

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
于 2012-02-28T14:52:30.037 回答
3

检查SendCommand 工具

您可以按如下方式使用它:

perl sendcommand.pl -i login.txt -t cisco -c "show ip route"
于 2011-08-23T21:59:02.937 回答
3

这听起来可能不是一个好主意,但我使用 java 并使用简单的 TCP/IP 套接字编程来连接到 telnet 服务器并交换通信。如果您知道实现的协议,它会完美运行。对于 SSH 等,除非您知道如何进行握手等,否则可能会很困难,但简单的 telnet 就像一种享受。

我尝试的另一种方法是在 java System.exec() 等中使用外部进程,然后让内置在 telnet 中的 Windows 为您完成这项工作,您只需向本地系统进程发送和接收数据。

于 2011-09-16T00:14:24.483 回答
3
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")
于 2014-02-19T06:55:09.780 回答
0

几个问题:

  1. 你能把东西放在你正在远程登录的设备上吗?
  2. 脚本执行的命令是相同的还是因机器/用户而异?
  3. 您是否希望单击该图标的人必须提供用户 ID 和/或密码?

也就是说,我不久前写了一些 Java 来与几个启用 IP 的电源板 (BayTech RPC3) 交谈,这些电源板可能对您有用。如果您有兴趣,我会看看我是否可以将其挖掘并发布在某个地方。

于 2009-04-02T15:10:33.523 回答
0

我喜欢 Active State 使用 python 给出的示例。这是完整的链接。我从链接中添加了部分简单日志,但您可以了解您可以做什么。

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()
于 2013-03-28T20:30:27.107 回答
0

Bash shell 支持这种开箱即用的方式,例如

exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream}
cat <&${stream}

要过滤并仅显示一些行,请运行:grep Example <&${stream}

于 2017-07-20T15:43:09.590 回答
-2

将 telnet 会话写入 BAT Dos 文件并执行。

于 2012-09-14T13:08:47.450 回答