【问题标题】:Telnet and opennig command prompt script in linuxlinux 中的 Telnet 和 opennig 命令提示符脚本
【发布时间】:2014-04-06 09:58:58
【问题描述】:

我没有任何主要的脚本编写经验,而且我对自己正在编写的脚本感到非常困惑。

  1. 我在 Linux 中使用 dynagen,并使用两个路由器 R1(fa0/0=10.1.1.1/端口 2101)和 R2(fa0/0=10.1.1.2/端口 2102)创建了一个基本拓扑。

  2. 我设法创建了一个 python 脚本并运行路由器,我可以启动和停止它们并打开控制台,我还可以从 putty 运行它们并执行相同的任务。

  3. 我需要一个脚本来自动远程登录到我的 Linux 并提示我输入用户名和密码/启动路由器/打开设备的命令提示符/将当前运行的配置文件保存在文件夹中/。

到目前为止,这是我为我的第三个任务提出的,它远程登录到我的 Linux,但不提示我输入用户名和密码,它只是打印它们,我坚持其余的。

#!/usr/bin/expect

set timeout 20
spawn telnet x.x.x.x
expect "login:"
expect "Username:"
send "user\r"
expect "Password:"
send "pass\r";
interact 

感谢任何帮助。

【问题讨论】:

  • 在命令提示符下输入telnet x.x.x.x会发生什么?
  • 它提示我输入用户名和密码,然后成功 telnet 到我的 Linux。
  • 确保您的身份expecting 与您所看到的相匹配...如果您将上述shell命令结果复制并粘贴到问题中会更有帮助...不幸的是这可能很难测试(为我们),因为这些天没有多少 telnet 服务器......
  • 我做了几处更改,它似乎工作正常,脚本提示我输入用户名和密码。除了telnet、用户名和密码,你能给我一个关于我的第三个任务的建议吗?
  • 这个命令“Terminal -e ssh ”能帮我打开路由器的控制台吗?

标签: linux ssh telnet expect


【解决方案1】:

我在这里要做的是使用expect命令的正则表达式模式,并等待“登录:”或“用户名:”。类似于以下内容:

#!/usr/bin/expect

set timeout 20
spawn telnet x.x.x.x
expect {
    -re "login:|Username:" {
        send "user\r"
        expect "*assword:"
        send "pass\r"; #After this you may want to expect an appropriate prompt (>, $, #, or whatever) prior to handing control over to user
        interact 
    }
    timeout {
        puts "Timed out while waiting for login prompt"
    }
}

让我知道这是怎么回事。

【讨论】:

  • 感谢您的回复,我试过了,它可以工作了。现在我可以远程登录到我的 Linux,现在我需要一个自动脚本来启动我的路由器(R1 和 R2)并打开他们的控制台并保存当前运行的配置文件到一个文件夹。我看过这么多不同的脚本,我很困惑。我必须为 R1 和 R2 打开这些端口吗?
  • 不确定您的设置是如何工作的,但在上面的脚本中,您可以删除“交互”命令并将其替换为通过发送/预期对发送您需要的任何命令。基本上,通过命令行交互式登录时可以做的任何事情,都可以通过 expect 实现自动化。这就是期望的意图。并且由于 expect 是 Tcl 的扩展,您可以使用所有 Tcl 构造来执行条件分支以及您可能需要的任何内容。请参阅these samples,它们应该可以帮助您扩展脚本。
  • 如果我错了,请纠正我,我认为我需要在我的 Linux 和运行的路由器之间建立云连接,以便它们可以相互 ping,然后添加命令“start R1/R2”和“控制台 R1/R2”到我的脚本。
  • 基本上,我参与了一个项目,我们打算有一个网页,任何用户都可以点击任何练习实验室,然后我们的前端服务器远程桌面到后端服务器,telnet 到预期的路由器并为用户打开命令提示符以进行配置。这对我的水平来说是进步的,但我很高兴能产生任何影响。
  • 如果您已经从服务器远程登录进入,您现在需要发起到路由器的新连接(再次远程登录?),那么您可以因此,通过添加到当前脚本(更多发送/期望对)中,尽管我认为最好在该中间服务器上设置一个单独的期望脚本以连接到每个路由器,并执行您需要脚本执行的任何操作,并且然后从您最初 telnet 到的中间服务器运行这些单独的脚本。
猜你喜欢
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
相关资源
最近更新 更多